BRa*_*t27 6 forms ajax jsf rendering
我对JSF上的ajax有一些疑问.
我的xhtml看起来像这样:
<h:body>
<h:form id="menuForm">
<h:outputLabel for="menu">Available actions: </h:outputLabel>
<h:selectOneMenu id="menu" value="#{menu.mainMenuItem}">
<f:selectItem itemLabel="Select an option..." itemValue="null" />
<f:selectItems value="#{menu.mainMenuItems}" />
<f:ajax render=":menuForm :adminUsersForm :loadInfoForm :viewFilesForm" />
<!-- <f:ajax render="@all" /> -->
</h:selectOneMenu>
</h:form>
<h:form id="adminUsersForm"
rendered="#{menu.mainMenuItem == 'Admin users.'}">
<h:commandButton value="Button 1" />
</h:form>
<h:form id="loadInfoForm"
rendered="#{menu.mainMenuItem == 'Load info.'}">
<h:commandButton value="Button 2" />
</h:form>
<h:form id="viewFilesForm"
rendered="#{menu.mainMenuItem == 'View files.'}">
<h:commandButton value="Button 3" />
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
当我使用时,<f:ajax render=":menuForm :adminUsersForm :loadInfoForm :viewFilesForm" />我得到malformedXML错误,另一方面当我使用<f:ajax render="@all" />正确<h:form>的渲染时.
这里发生了什么?我读了用ajax我们可以渲染组件只是相同的内径的形式,但是如果我们使用:componentID它可以使一个-使用外窗体ajax-组件.
在此先感谢,也许这是一个基本问题,但我对JSF很新,并试图学习.
Bal*_*usC 14
本<f:ajax render>应指向它的客户端ID 总是出现在JSF生成的HTML DOM树.这是强制性的,因为它是客户端的JavaScript,需要更新HTML DOM树.但是,您将它指向HTML DOM树中不存在的客户端ID,因为它们不是由JSF呈现的.
您需要将具有rendered属性的元素放在父组件中,该组件始终存在于JSF生成的HTML DOM树中.
这是一种方式:
<h:form id="menuForm">
<h:outputLabel for="menu">Available actions: </h:outputLabel>
<h:selectOneMenu id="menu" value="#{menu.mainMenuItem}">
<f:selectItem itemLabel="Select an option..." itemValue="null" />
<f:selectItems value="#{menu.mainMenuItems}" />
<f:ajax render=":menuForm :adminUsers :loadInfo :viewFiles :adminUsersForm :loadInfoForm :viewFilesForm" />
</h:selectOneMenu>
</h:form>
<h:panelGroup id="adminUsers">
<h:form id="adminUsersForm" rendered="#{menu.mainMenuItem == 'Admin users.'}">
<h:commandButton value="Button 1" />
</h:form>
</h:panelGroup>
<h:panelGroup id="loadInfo">
<h:form id="loadInfoForm" rendered="#{menu.mainMenuItem == 'Load info.'}">
<h:commandButton value="Button 2" />
</h:form>
</h:panelGroup>
<h:panelGroup id="viewFiles">
<h:form id="viewFilesForm" rendered="#{menu.mainMenuItem == 'View files.'}">
<h:commandButton value="Button 3" />
</h:form>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
这是另一种方式(如果表单之间实际上没有要更新的内容,我建议更多):
<h:form id="menuForm">
<h:outputLabel for="menu">Available actions: </h:outputLabel>
<h:selectOneMenu id="menu" value="#{menu.mainMenuItem}">
<f:selectItem itemLabel="Select an option..." itemValue="null" />
<f:selectItems value="#{menu.mainMenuItems}" />
<f:ajax render=":menuForm :otherForms :adminUsersForm :loadInfoForm :viewFilesForm" />
</h:selectOneMenu>
</h:form>
<h:panelGroup id="otherForms">
<h:form id="adminUsersForm" rendered="#{menu.mainMenuItem == 'Admin users.'}">
<h:commandButton value="Button 1" />
</h:form>
<h:form id="loadInfoForm" rendered="#{menu.mainMenuItem == 'Load info.'}">
<h:commandButton value="Button 2" />
</h:form>
<h:form id="viewFilesForm" rendered="#{menu.mainMenuItem == 'View files.'}">
<h:commandButton value="Button 3" />
</h:form>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种方式中我都包含了所有其他表单的ID render.这是解决JSF Ajax JavaScript中的一个错误(将在JSF 2.2中修复).有关详细说明,请参阅包含其他表单的内容的Ajax呈现.
| 归档时间: |
|
| 查看次数: |
6154 次 |
| 最近记录: |