Jsf 如何通过<;传递bean操作/侦听器方法;用户界面:参数>;属于<;用户界面:包括>;

Jsf 如何通过<;传递bean操作/侦听器方法;用户界面:参数>;属于<;用户界面:包括>;,jsf,parameter-passing,facelets,managed-bean,uiinclude,Jsf,Parameter Passing,Facelets,Managed Bean,Uiinclude,我正在使用加载数据表(我正在使用Primefaces)。我想将侦听器中的用于标记。我测试了关闭的代码,但没有触发事件onRowEdit或onRowCancel。 这是我的页面: ... <ui:include src="../Componentes/tablaEditable.xhtml"> <ui:param name="columnas" value="#{tabla2FuentesHL7.dataTableColumns}" /> <ui:

我正在使用
加载数据表(我正在使用Primefaces)。我想将
侦听器中的
用于标记
。我测试了关闭的代码,但没有触发事件onRowEditonRowCancel。 这是我的页面:

...
<ui:include src="../Componentes/tablaEditable.xhtml">
     <ui:param name="columnas" value="#{tabla2FuentesHL7.dataTableColumns}" />
     <ui:param name="bean" value="#{tabla2FuentesHL7.listTabla2FuenteDTO}" />
     <ui:param name="aceptarEdicion" value="#{tabla2FuentesHL7.onRowEdit}" />
     <ui:param name="cancelarEdicion" value="#{tabla2FuentesHL7.onRowCancel}" />
</ui:include>
...
如果我改变这一点:

<p:ajax event="rowEdit" listener="#{aceptarEdicion}"  />
        <p:ajax event="rowEditCancel" listener="#{cancelarEdicion}"  />

为此:

        <p:ajax event="rowEdit" listener="#{tabla2FuentesHL7.onRowEdit}"  />
        <p:ajax event="rowEditCancel" listener="#{tabla2FuentesHL7.onRowCancel}"  />

我的代码工作正常,但我需要一个动态数据表。有没有办法将参数传递给侦听器? 谢谢

只能传递值表达式,而不能传递方法表达式

更好地利用EL通过大括号
[]
表示法参数化方法名称的能力。然后您可以将方法名称声明为普通的
String

<ui:include src="../Componentes/tablaEditable.xhtml">
     ...
     <ui:param name="beanEdicion" value="#{tabla2FuentesHL7}" />
     <ui:param name="aceptarEdicion" value="onRowEdit" />
     <ui:param name="cancelarEdicion" value="onRowCancel" />
</ui:include>

...


更新根据评论,它似乎在PrimeFaces 5.1中仍然不起作用,尽管声明它已经在3.5中修复。你基本上需要重新讨论这个问题

同时,您可以借助JSF实用程序库的标记来解决这个问题。这基本上将值表达式转换为方法表达式:

<ui:include src="../Componentes/tablaEditable.xhtml">
         ...
     <ui:param name="aceptarEdicion" value="#{tabla2FuentesHL7.onRowEdit}" />
     <ui:param name="cancelarEdicion" value="#{tabla2FuentesHL7.onRowCancel}" />
</ui:include>

...

...

谢谢您的回复,但我无法让它正常工作。现在我有了这个错误:
javax.el.PropertyNotFoundException:Target不可访问,标识符'beanEdicion'解析为null
哪个PF版本?这是
中的一个已知问题,应该已经在5.x中修复。另请参阅相关问题:我正在使用JSF2.1.11和PrimeFaces5.1。再次感谢:)Mojarra 2.1.11相当老了(已经快3年了!)。你能试试2.1.29吗?这应该会带来很多错误修复和性能改进。@BalusC:你是重置了你的声誉还是溢出;-)
        <p:ajax event="rowEdit" listener="#{tabla2FuentesHL7.onRowEdit}"  />
        <p:ajax event="rowEditCancel" listener="#{tabla2FuentesHL7.onRowCancel}"  />
<ui:include src="../Componentes/tablaEditable.xhtml">
     ...
     <ui:param name="beanEdicion" value="#{tabla2FuentesHL7}" />
     <ui:param name="aceptarEdicion" value="onRowEdit" />
     <ui:param name="cancelarEdicion" value="onRowCancel" />
</ui:include>
<p:ajax event="rowEdit" listener="#{beanEdicion[aceptarEdicion]()}"  />
<p:ajax event="rowEditCancel" listener="#{beanEdicion[cancelarEdicion]()}"  />
<ui:include src="../Componentes/tablaEditable.xhtml">
         ...
     <ui:param name="aceptarEdicion" value="#{tabla2FuentesHL7.onRowEdit}" />
     <ui:param name="cancelarEdicion" value="#{tabla2FuentesHL7.onRowCancel}" />
</ui:include>
<o:methodParam name="aceptarEdicionParam" value="#{aceptarEdicion}" />
<o:methodParam name="cancelarEdicionParam" value="#{cancelarEdicion}" />
...
<p:ajax event="rowEdit" listener="#{aceptarEdicionParam}"  />
<p:ajax event="rowEditCancel" listener="#{cancelarEdicionParam}"  />