невозможно установить параметр управляемого свойства со значением выражения JSF - PullRequest
1 голос
/ 20 января 2012

У меня странная проблема, которую я пытался исправить в течение некоторого времени, но застрял в одном месте и не совсем понимаю, что здесь происходит.

Моя страница указателя выглядит следующим образом:

<h:selectOneMenu id="selectMenu" value="#{indexBean.model.selected_id}" styleClass="indexItems">
    <f:selectItems value="#{indexBean.myModelValues}" />    
    <a4j:support event="onchange" reRender="peek" />        
</h:selectOneMenu> 
<br>
<h:outputText id="peek" value ="#{indexBean.model.selected_id}"/>
<br>
<a4j:commandButton value="Go to Form" action="form" styleClass="indexItems">
    <f:param name="selected" value="#{indexBean.model.selected_id}" />                                       
</a4j:commandButton>

Команда commandButton отправляет пользователя на следующую страницу, когда я хочу получить выбранную позицию из selectOneMenu.Проблема в том, что ничего не отправлено.Когда я выбираю какое-то значение из меню, «peek» outputText отображается правильно, и я вижу правильный выбор.Однако это не отправлено на следующую страницу и Боб.Удивительно, но когда я изменяю значение параметра на фиксированную строку, это работает !!!То есть это:

<f:param name="selected" value="someValue1" />

Читается правильно в следующем Бине !!!Все бины запрашиваются с аннотацией RichFaces @KeepAlive (я пробовал без аннотации, и это то же самое).Я попытался: - изменить a4j: commandButton на h: commandLink или h: outputLink - изменить indexBean.model.selected_id на indexBean.selected_id - окончательно изменить источник ввода с h: selectOneMenu на h: inputText

Ничего не помогает -это все то же самое - жестко закодированная строка корректно передается на следующую страницу, но когда я пытаюсь использовать выражение, параметр всегда пуст.

Здесь я выкладываю фрагмент Face-config.xml:

<managed-bean>
    <managed-bean-name>indexBean</managed-bean-name>
    <managed-bean-class>id.webapp.beans.IndexBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>model</managed-bean-name>
    <managed-bean-class>id.webapp.beans.Model</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>formBean</managed-bean-name>
    <managed-bean-class>id.webapp.beans.FormBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>selectedValue</property-name>
        <value>#{param.selected}</value>
    </managed-property>
</managed-bean> 

У кого-нибудь есть идеи, почему это не работает?В прошлом я использовал подобные параметры управляемых свойств, и это работало (имеется в виду использование некоторых динамически измененных значений, а не статической строки).

1 Ответ

1 голос
/ 20 января 2012

<f:param> оценивается во время первоначального запроса (когда должна отображаться форма), а не во время запроса отправки формы. Таким образом, оно все еще остается исходным значением, а не измененным значением.

Дайте <a4j:commandButton> и id и укажите его также в reRender, чтобы его <f:param> переоценили перед нажатием кнопки.

<h:selectOneMenu id="selectMenu" value="#{indexBean.model.selected_id}" styleClass="indexItems">
    <f:selectItems value="#{indexBean.myModelValues}" />    
    <a4j:support event="onchange" reRender="peek,button" />        
</h:selectOneMenu> 
<br>
<h:outputText id="peek" value ="#{indexBean.model.selected_id}"/>
<br>
<a4j:commandButton id="button" value="Go to Form" action="form" styleClass="indexItems">
    <f:param name="selected" value="#{indexBean.model.selected_id}" />                                       
</a4j:commandButton>
...