我有一个奇怪的问题,我一直试图修复一段时间,但我被困在一个地方,并不太明白这里发生了什么。
我的索引页面如下所示:
<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>
当我想从selectOneMenu获取所选位置时,commandButton会将用户发送到下一页。问题是没有发送任何东西。当我从菜单中选择一些值时,'peek'outputText被正确地重新渲染,我可以看到正确的选择。但是它不会发送到下一页和Bean。令人惊讶的是,当我将参数的值更改为固定的String时,它的工作原理!所以即:
<f:param name="selected" value="someValue1" />
在下一个Bean中正确读取!!!使用RichFaces @KeepAlive注释来请求所有bean的范围(我尝试没有注释,它是相同的)。我已经打过道了: - 将a4j:commandButton改为h:commandLink或h:outputLink - 将indexBean.model.selected_id改为indexBean.selected_id - 最终将输入源从h:selectOneMenu更改为h:inputText
没有任何帮助 - 它仍然是相同的 - 硬编码的String正确传递到下一页,但是当我尝试使用expresion时,参数始终为空。
这里我发布了faces-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>
有没有人知道为什么这不起作用?我已经使用过去的托管属性参数,并且它起作用(意味着使用一些动态更改的值而不是静态String)。
答案 0 :(得分:1)
<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>