2

我将primefaces与facelets一起使用,我有一个问题:

例如,我有 dataGrid,我想调用在 faces-config 中注册的 bean 方法以包含一些动态内容:

<p:dataGrid var="provider" value="#{paymentFormBean.providers}">
   <ui:include src="contentFactory.getSpecificForm('some attribute')"/>
</p:dataGrid>

我如何使用来自 dataGrid 的 var 的参数调用 getSpecificForm 方法?就像是:

<p:dataGrid var="provider" value="#{paymentFormBean.providers}">
   <ui:include src="contentFactory.getSpecificForm(provider.formName)"/>
</p:dataGrid>

更新:如果我尝试调用 dataGrid 中任何组件的 actionListener 中的方法:

<p:commandLink update="details" actionListener="#{contentFactory.getSpecificForm(provider.formName)}" /> 

然后属性正确传递,但在 ui:include 中值为空

有人可以帮我吗?谢谢

4

2 回答 2

1

只需制作ContentFactory一个托管 bean

@ManagedBean
@RequestScoped // Or whatever
public class ContentFactory {

    public String getSpecificForm(String formName) {
        return null; // TODO: implement.
    }

}

这样您就可以使用 EL 来调用它

<ui:include src="#{contentFactory.getSpecificForm(provider.formName)}" />

更新:我忘了,ui:include在 UI 中继器内部不起作用。考虑使用c:forEach而不是p:dataGrid. 您只需在c:forEach.

<html xmlns:c="http://java.sun.com/jstl/core">
...

<c:forEach var="provider" items="#{paymentFormBean.providers}">
    <ui:include src="#{contentFactory.getSpecificForm(provider.formName)}" />
</c:forEach>
于 2010-12-26T13:55:28.507 回答
0

尝试JBoss EL 实现

在 web.xml 中添加以下上下文参数:

<context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
于 2010-12-26T14:50:08.813 回答