我可以“传递”带有JSF param标签的对象吗?


问题内容

我正在寻找的是在f:param标记中带有一个我自己选择的value属性中的对象。然后,在该操作的后备bean方法中,我希望能够从请求中拉出此Object。(很抱歉,如果我的术语不太好,我是JSF的新手)。

现在,我可以在请求参数中传递字符串了。我还意识到,在http get或post中,参数始终是String,所以我没有 真正
传递java对象。我还意识到,实现此目的的一种方法是传递某种“ id”,然后支持bean可以使用该“ id”来标识所讨论的对象。

但是,我想知道的是JSF是否允许我透明地执行此操作。我可以指定任何对象作为参数的值,然后仅以操作方法从RequestMap中获取它吗?


问题答案:

您无法使用来做到这一点<f:param>。需要将其附加到请求的URL,因此实际上必须是String。只需使用<f:setPropertyActionListener>

例如

<h:commandLink value="Submit" action="#{bean.submit}">
    <f:setPropertyActionListener target="#{bean.otherBean}" value="#{otherBean}" />
</h:commandLink>

这样,#{otherBean}可以作为this.otherBean内部submit()方法使用。这样,您也不必惹请求参数地图(对于这情况下<f:param>,我宁愿使用了
托管属性注射#{param.name}代替)。

替代方案是<h:inputHidden>Converter或结合使用“战斧”
<t:saveState>。另请参阅此博客文章以获取更多背景信息和示例。