2012-04-04 90 views
1

如何使用Primefaces和Ajax(或不使用)渲染部分xhtml页面。其他一切正在工作,当用户按下复选框时,显示消息,但usernamecontent从不更新。在这种情况下如何刷新panelgrid?我完全新手使用AJAX,今天:)如何使用AJAX或JSF刷新页面的一部分?

<h:outputLabel value="Do you want to create username?" for="description" /> 
    <p:selectBooleanCheckbox value="#{testController.selectedNew.asUser}"> 
    <p:ajax update="msg" listener="#{testController.selectedNew.addMessage()}"/> 
    <p:ajax update="usernamecontent"/> ------> **This is not working!** 
    </p:selectBooleanCheckbox> 

    <h:panelGrid columns="2" id="usernamecontent" rendered="#{testController.selected.asUser}"> 
    <h:outputLabel value="#{bundle.CreateUserLabel_userUsername}" for="username" /> 
    <p:inputText id="username" value="#{testController.selectedNew.userUsername.username}" title="#{bundle.CreateUsersTitle_username}" required="true" requiredMessage="#{bundle.CreateUserRequiredMessage_username}"/> 

    <h:outputLabel value="#{bundle.CreateUsersLabel_password}" for="password" /> 
    <p:inputText id="password" value="#{testController.selectedNew.userUsername.password}" title="#{bundle.CreateUserTitle_password}" required="true" requiredMessage="#{bundle.CreateUserRequiredMessage_password}"/> 
    </h:panelGrid> 

感谢 萨米

回答

1

usernamecontent组件开始通过自己在服务器端有条件地显示。为了能够对组件进行ajax更新,您需要确保始终呈现相关组件,因为它最终需要在客户端更新它。

您需要将其包装在始终呈现的其他组件中,以便JavaScript可以随时访问它以更新内容。

<h:panelGroup id="usernamecontent"> 
    <h:panelGrid columns="2" rendered="#{testController.selected.asUser}"> 
     ... 
    </h:panelGrid> 
</h:panelGroup> 
+0

就是这样:)非常感谢,kiitos kiitos!顺便说一句,你有很好的指导或书籍的想法链接什么读取jsf + ajax跳转开始?你有这个想法:http://stackoverflow.com/questions/10003274/jpa-manytomany-in-case-of-users-and-groups/10003452#10003452 – Sami 2012-04-04 22:45:30

+0

不客气。您可能会发现[JSF 2.0中的通信](http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html)有帮助。 – BalusC 2012-04-04 22:47:40