У меня есть настройка 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>
При создании новых элементов новый элемент отображается в раскрывающемся списке, но если я изменил имя"атрибута моего элемента и сохранения, метка не изменится на новое имя до следующего запроса, несмотря на то, что данные в бине изменились.
Поэтому я решил эту проблему, вызвав второй вызовповторите сохранение после завершения сохранения изменений.Проблема в том, что это также перерисовывает панель сообщений, так что я могу уничтожить все сообщения, которые могли отображаться.Использование limitToList="true"
в a4j:jsFunction
имеет тот же эффект, что и отсутствие его вызова.
Мне нужны предложения;либо новая цель для функции перерисовки, либо другой способ решения проблемы.Заранее спасибо!