jsf2-通过h:commandlink动态修改jsf片段



我在page1中有一个h:commandlink控件。控件使用f:ajax调用以下h:panelgroup:

我在page2中有一个h:panelgroup控件(一个片段(,其中有一个ui:include。我在page3中有一个h:panelgroup控件(一个片段(,其中有一个ui:include

现在,根据第1页上的选择,我想通过单击h:commandlink控件来切换代码段。

我有一个大问题:似乎只有当我在命令链接上点击两次时,代码片段才会改变——而不是一次点击。

我试图删除f:ajax来渲染面板组,但它仍然不起作用。。。

这个问题有两个潜在的原因。

  1. <f:ajax>完全重新呈现另一个<h:form>,而不是它所在的位置。这样,另一个窗体的视图状态将丢失,这需要在真正执行之前调用另一个表单上的操作两次。

    解决方案是不重新呈现其他<h:form>,而只呈现该形式的一些容器组件。例如

    <h:form id="otherForm">
        <h:panelGroup id="content">
            ...
        <h:panelGroup>
    </h:form>
    

    带有

    <f:ajax render=":otherForm:content" />
    

  2. <h:commandLink>或其任何父组件上有rendered属性时,它必须在回发请求的应用请求值阶段评估true,以便让JSF在该请求的调用操作阶段调用与<h:commandLink>关联的bean操作。也许bean是请求范围的,和/或bean内部的一些奇怪/不合逻辑的流导致rendered属性没有得到正确保留。

    最好是在@ViewScopedbean中维护这些rendered条件,并让其操作方法返回voidnull,这样,只要您与同一视图交互,bean就会一直存在。仅在操作方法期间更改rendered条件,而不在setters/getters或其他内部更改。

相关内容

  • 没有找到相关文章