我有以下问题: 我用这种方式定义了自己的自定义组件:
<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。有任何想法吗?非常感谢你。
答案 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
希望能帮到你。