我有一个奇怪的问题,我一直试图解决一段时间,但被困在一个地方,不太明白这里发生了什么。
我的索引页面如下所示:
<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。令人惊讶的是,当我将参数的值更改为固定字符串时,它起作用了!!!所以,即:
<f:param name="selected" value="someValue1" />
在下一个 Bean 中读取正确!!!所有的 bean 都使用 RichFaces @KeepAlive 注释来请求范围(我试过没有注释,它是一样的)。我已经尝试过: -将 a4j:commandButton 更改为 h:commandLink 或 h:outputLink -将 indexBean.model.selected_id 更改为 indexBean.selected_id -最后将输入源从 h:selectOneMenu 更改为 h:inputText
没有任何帮助 - 它仍然是相同的 - 硬编码的字符串被正确传递到下一页,但是当我尝试使用表达式时,参数始终为空。
在这里,我发布了 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>
有谁知道为什么这不起作用?我过去曾使用过类似的托管属性参数并且它有效(意味着使用一些动态更改的值而不是静态字符串)。