在ajax调用JSF-2.0之后,Commandlink操作不起作用

时间:2012-03-26 22:15:30

标签: ajax jsf-2

在进行ajax调用以呈现面板组panel1后,commandlink link2没有工作。当整个页面被重新编码而不是ajax调用以显示模态时,这是有效的。

Main.xhtml

<h:panelGroup id="panel1">
<ui:fragment rendered="#{downloadTo.showModal}">
    <ui:include src="modal.xhtml" />
</ui:fragment>  
</h:panelGroup>

<h:form>
  <h:commandLink id="link" value="download" action="#{backing.openModal()}">
    <f:ajax render="_panel1"/>
 </h:commandLink>       
</h:form>

modal.xhtml包含

 <h:form>
   <h:commandLink id="link2" value="download" action="#{backing.downloadData()}"/>
 </h:form>

2 个答案:

答案 0 :(得分:1)

您需要确保包含rendered属性条件的辅助bean为@ViewScoped。否则,该条件将在ajax请求上重新初始化为默认值。您还需要更改<f:ajax>渲染以显式包含要进行ajax更新的任何其他<h:form>的客户端ID,否则它将失去其视图状态。

E.g。在modal.xhtml

<h:form id="downloadForm">
  <h:commandLink id="link2" value="download" action="#{backing.downloadData()}"/>
</h:form>

main.xhtml

中的此更改
<h:form>
  <h:commandLink id="link" value="download" action="#{backing.openModal()}">
    <f:ajax render="_panel1 _downloadForm" />
 </h:commandLink>       
</h:form>

另见:

答案 1 :(得分:0)

我看到的是,您正在呈现_panel1而不是panel1。这应该有效:

<h:commandLink id="link" value="download" action="#{backing.openModal()}">
    <f:ajax render="panel1"/>
 </h:commandLink>