h:selectOneMenu标签在a4j重新渲染时没有变化

时间:2011-03-31 20:31:55

标签: jsf richfaces seam rerender

我有一个h:selectOneMenu设置,看起来像这样:

<f:view>
    <h:form id="tehForm">
        <h2>Header</h2><br/>
        <a4j:outputPanel id="msgPanel" ajaxRendered="true">
            <h:messages styleClass="message"/>
        </a4j:outputPanel>
        <a4j:outputPanel id="mainPanel" ajaxRendered="true"><br/>
            Select an item:<br/>
            <h:selectOneMenu id="itemMenu" value="#{bean.itemId}">
                <f:selectItem itemValue="-1" itemLabel="Please Select..."/>
                <s:selectItems value="#{bean.item}" itemValue="#{item.id}" var="item" label="#{item.name}"/>
                <a4j:support event="onchange" action="#{bean.selectItem}"/>
            </h:selectOneMenu>
            <rich:spacer width="10px"/>
            <a4j:commandLink value="Create New" action="#{bean.createNew}"
                             rendered="#{bean.selectedItemId != 0}"/>
            <h:outputText rendered="#{bean.selectedItemId gt -1}" value="Item Name:  "/><br/>
            <h:inputText rendered="#{bean.selectedItemId gt -1}" value="#{bean.selectedItem.name}" maxlength="50" size="75"/><br/><br/>
            <a4j:commandButton value="Save New" action="#{bean.save}" rendered="#{bean.selectedItemId == 0}"/>
            <a4j:commandButton value="Save Changes" action="#{bean.save}" rendered="#{bean.selectedItemId gt 0}" oncomplete="jsRerender();" />
            <a4j:jsFunction name="jsRerender" rerender="mainPanel"/>
        </a4j:outputPanel>
    </h:form>
</f:view>

创建新项目时,新项目会显示在下拉列表中,但如果我更改项目的“名称”属性并保存,则标签不会更改为新名称,直到下一个请求尽管bean中的数据发生了变化。

因此,当保存更改完成后,我再次通过强制再次重新调用来解决此问题。麻烦的是,这也会重新显示消息面板,因此我会查看可能已显示的任何消息。使用limitToList="true"中的a4j:jsFunction与不调用它具有相同的效果。

我需要建议;或者是重新渲染功能的新目标,或者是解决问题的另一种方式。提前谢谢!

1 个答案:

答案 0 :(得分:0)

尝试删除oncomplete javascript并使用reRender="mainPanel"

<a4j:commandButton value="Save Changes" 
                   action="#{bean.save}" 
                   rendered="#{bean.selectedItemId gt 0}"
                   reRender="mainPanel" />

在您的版本中,我认为没有reRender属性的“保存更改”按钮会重新呈现所有页面,从而刷新消息。