我试图在一个 JSF 页面之间传递一个参数,从一个 bean 到另一个。我知道这是一个常见的问题,事实上我在写下来之前已经尝试了几种方法。为此,我将两个 bean 都放在了会话范围内,并在第一个 bean 中添加了以下内容:
<p:commandButton value="Submit" type="submit"
actionListener="#{sourceBean.save}" action="success">
<f:setPropertyActionListener
target="#{targetBean.foo}" value="#{sourceBean.foo}" />
</p:commandButton>
问题是我不希望这些 bean 在会话范围内,而是在视图范围内。所以我试着把我的第一页:
<p:commandButton value="Submit" type="submit"
actionListener="#{sourceBean.save}" action="success">
<f:param name="foo" value="#{sourceBean.foo}"/>
</p:commandButton>
在第二页:
<f:metadata>
<f:viewParam id="foo" name="foo" value="#{targetBean.foo}"
/>
</f:metadata>
问题是传递的字符串是空的,所以很明显,我从转换器中得到一个错误。
我想我在托管 bean 的配置中遗漏了一些东西。我是否必须以某种方式链接目标和源 bean?此刻我有这样的配置:
<managed-bean>
<managed-bean-name>targetBean</managed-bean-name>
<managed-bean-class>guiBeans.TargetBean</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>sourceBean</managed-bean-name>
<managed-bean-class>guiBeans.SourceBean</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
另一个问题:在我的应用程序中,我在转换期间使用的值 foo.id 在我保存对象时由数据库自动设置,因此当我调用时:
actionListener="#{sourceBean.save}"
转换器获取 id 并将其转换为字符串(如果需要,反之亦然)。所以,我想知道在 JSF 中是首先调用 actionListener 还是设置参数的函数。
这可能是我得到空字符串的原因吗?非常感谢。