sci*_*iFi 4 primefaces jsf-2 uiinclude commandbutton
我有一个页面,动态地包含来自另一个页面的内容(这是通过bean中的方法完成的)
firstPage.xhtml
<ui:include src="#{managedBean.pageView}">
<ui:param name="method" value="#{managedBean.someAction}"/>
</ui:include>
Run Code Online (Sandbox Code Playgroud)
这会重定向到第二个页面,<ui:composition>
其中包含commandButton.
secondPage.xhtml
<ui:composition>
..
..
<p:commandButton actionListener=#{method} value="Submit"/>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
ManagedBean
public String pageView(){
return "secondPage.xhtml";
}
public void someAction(){
*someAction*
}
Run Code Online (Sandbox Code Playgroud)
secondPage.xhtml中的commandButton不起作用.
任何帮助将不胜感激.
Bal*_*usC 10
您无法通过方法表达式传递<ui:param>
.它们被解释为价值表达.
你基本上有3种选择:
将bean实例和方法名称拆分为2个参数:
<ui:param name="bean" value="#{managedBean}" />
<ui:param name="method" value="someAction" />
Run Code Online (Sandbox Code Playgroud)
并使用括号表示法将它们耦合到标记文件中[]
,如下所示:
<p:commandButton action="#{bean[method]}" value="Submit" />
Run Code Online (Sandbox Code Playgroud)
创建一个标记处理程序,将值表达式转换为方法表达式.JSF实用程序库OmniFaces有一个<o:methodParam>
这样做.在标记文件中使用如下:
<o:methodParam name="action" value="#{method}" />
<p:commandButton action="#{action}" value="Submit" />
Run Code Online (Sandbox Code Playgroud)
请改用复合组件.您可以使用<cc:attribute method-signature>
将操作方法定义为属性.
<cc:interface>
<cc:attribute name="method" method-signature="void method()"/>
</cc:interface>
<cc:implementation>
<p:commandButton action="#{cc.attrs.method}" value="Submit"/>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
使用如下:
<my:button method="#{managedBean.someAction}" />
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
4728 次 |
最近记录: |