2011-03-31 30 views
2

我有一個H:selectOneMenu用於設置一個看起來是這樣的:H:selectOneMenu用於標籤不改變對A4J重新呈現

<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中的數據已更改。

因此,我通過在保存更改完成時強制第二次調用再次重新渲染來解決此問題。麻煩的是,這也會重新顯示消息面板,因此我會破壞可能已顯示的任何消息。使用a4j:jsFunction中的limitToList="true"與調用它的效果相同。

我需要建議;要麼是換新功能的新目標,要麼是另一種解決問題的方式。提前致謝!

回答

0

嘗試取出oncomplete JavaScript和使用reRender="mainPanel"

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

在你的版本我認爲「保存更改」按鈕而不reRender屬性將重新呈現所有頁面,從而刷新的消息。

+0

這是不正確刷新下拉菜單的代碼。不完整的jsFunction是一個解決方法。 – iandisme 2011-04-01 14:38:06

相關問題