我正在尝试构建一个允许用户编辑和禁止编辑视图的UI。目前它正在运作,但有一个我不明白的小虫子。有人可以解释一下JSF渲染和ajax的确切工作流程导致以下内容:
首次加载页面,或重新加载页面时,编辑"编辑"触发编辑模式的按钮工作正常。
我一更新id =" currentChapters"的内容通过左侧菜单中的ajax部分,我必须单击"编辑"按钮两次以便渲染编辑器(不管我用户的事件是什么 - onclick,oncomplete或JSF动作)。在进入编辑视图并返回到非编辑视图后,再次单击该按钮即可工作。
我不会惹恼导致此问题的事件流。
ENDPOINT
支持bean:
<ui:composition template="../WEB-INF/templates/template-main.xhtml" >
<ui:define name="title">Projekt</ui:define>
<ui:define name="content">
<f:metadata>
<f:viewAction action="#{ProjectBacking.onPageLoad()}" />
</f:metadata>
<b:row class="projects-page">
<b:column span="3" styleClass="project-menu-left">
<b:accordion rendered="#{Login.user.team.project != null}">
<c:forEach items="#{ProjectBacking.projectDocuments}" var="document">
<b:panel title="#{document.documentName}">
<b:listLinks>
<c:forEach items="#{document.projectChapters}" var="chapter">
<b:navLink value="#{chapter.chapterOrder}.#{chapter.chapterName}" update="currentChapters">
<f:ajax listener="#{ProjectBacking.setCurrentContentForChapter(chapter)}"
render="currentChapters"/>
</b:navLink>
</c:forEach>
</b:listLinks>
</b:panel>
</c:forEach>
</b:accordion>
</b:column>
<b:column span="9" id="currentChapters" >
<h:form id="form-ckeditor">
<b:row rendered="#{Login.user.team.project != null}">
<b:column span="12">
<h:panelGroup layout="block" styleClass="user-content-header">
#{ProjectBacking.currentContent.projectChapter.projectDocument.documentName} - #{ProjectBacking.currentContent.projectChapter.chapterName}
</h:panelGroup>
</b:column>
<b:column span="12">
<h:panelGroup layout="block"
styleClass="project-content"
rendered="#{!ProjectBacking.isEdit}">
<h:outputText value="#{ProjectBacking.currentContent.content}"
escape="false"/>
</h:panelGroup>
</b:column>
<b:column span="3">
<b:commandButton value="Edit"
look="success"
rendered="#{!ProjectBacking.isEdit}"
action="#{ProjectBacking.setIsEditTrue()}"
update="currentChapters"
styleClass="full-width"/>
</b:column>
<b:column span="12">
<pe:ckEditor id="ckeditor"
rendered="#{ProjectBacking.isEdit}"
width="100%"
value="#{ProjectBacking.editorContent}">
<p:ajax event="save"
listener="#{ProjectBacking.updateProjectContent()}"
update="currentChapters" />
</pe:ckEditor>
</b:column>
</b:row>
</h:form>
</b:column>
</b:row>
</ui:define>
</ui:composition>