JSF 2 - 使用复合组件中的对象参数调用侦听器

时间:2017-01-18 14:09:30

标签: jsf primefaces jsf-2

我有以下问题: 我用这种方式定义了自己的自定义组件:

<composite:interface componentType="myComponent">
   <composite:attribute name="listener" method-signature="void action(java.lang.Object)"/>
   ...
   more attributues
</composite:interface>

现在,在我看来,我尝试传递一个侦听器,该侦听器具有通过ui:param标签传递给视图的特定手机对象:

<ui:include src="page.xhtml" >
     <ui:param name="currentCellphone" value="#{cellphone}" />
</ui:include>

然后,在page.xhtml视图中,我尝试执行:

<my:myComponent ... listener = "#{backbeanController.backbeanMethod(currentCellphone)}">

现在,如果backbean方法期望将手机对象作为参数,当它进入函数时,参数为 null。但是!如果它是&#39;例如,获取字符串,我发送一个字符串而不是myCellphone对象,工作得很好。

我无法将myCellphone参数正确传递给backbean。有任何想法吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

你不能将复杂对象作为参数传递,你可以只传递一个字符串,比如对象的“Id”。然后你必须重建对象,但你可以使用像这个例子中的会话映射:

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
sessionMap.put("controller", controller);

并将其命名为

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
MyController controller = (MyController) sessionMap.get("controller");

您可以阅读Primefaces forum中的完整示例,另见Other link

希望能帮到你。