h: метки selectOneMenu не меняются при повторном рендеринге a4j - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть настройка 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 имеет тот же эффект, что и отсутствие его вызова.

Мне нужны предложения;либо новая цель для функции перерисовки, либо другой способ решения проблемы.Заранее спасибо!

1 Ответ

0 голосов
/ 01 апреля 2011

Попробуйте удалить oncomplete javascript и использовать reRender="mainPanel":

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

В вашей версии я думаю, что кнопка "Сохранить изменения" без атрибута reRender переопределяет всю страницу, таким образом, обновляя сообщения.

...