0

我有这个数据表,其中包含一个客户列表和一个 Edit commandLink 列。我需要打开一个对话框来显示客户端的数据,并且我正在尝试使用 f:setPropertyActionListener 将 Client 对象发送到 bean 对话框,使用用于 dataTable 行的变量cli :

<p:dataTable id="tblClients" var="cli" value="#{clientsBean.clients}" rowKey="#{cli.id}">

   <p:column>  
      <p:commandLink id="lnkEdit" value="Edit" action="#{clientBean.start}" process="@this" update="dlgClient" oncomplete="dialogClient.show()">
         <f:setPropertyActionListener target="#{clientBean.client}" value="#{cli}" />
      </p:commandLink>
   </p:column>             

   <p:column headerText="Name" sortBy="#{cli.name}" id="name">
      #{cli.name}
   </p:column>
   ...
</p:dataTable> 

但是当我点击编辑按钮时,会抛出这个错误:

java.lang.IllegalArgumentException:无法将 java.lang.String 类型的 test.Client@95 转换为 test.Client 类

我确定 clientBean.client 是 Client 类型,它的 getter 和 setter 是正确的。

是否可以以任何方式引用 dataTable 变量?我需要实现一个转换器来完成这个任务吗?

任何帮助我将不胜感激,谢谢。

4

1 回答 1

0

这就是我解决的方法,您可以将cli变量作为参数发送到启动函数:

<p:dataTable id="tblClients" var="cli" value="#{clientsBean.clients}" rowKey="#{cli.id}">

   <p:column>  
      <p:commandLink id="lnkEdit" value="Edit" action="#{clientBean.start(cli)}" process="@this" update="dlgClient" oncomplete="dialogClient.show()">
         <f:setPropertyActionListener target="#{clientBean.destinyProperty}" value="#{clientsBean.sourceProperty}" />
      </p:commandLink>
   </p:column>             

   ...
</p:dataTable>

可以像这样在 clietBean 中接收此参数:

public void start(Client currentClient) {

    this.client = currentClient;
    ...        
}

这可以与 f:setPropertyActionListener 参数混合使用。

谢谢。

于 2012-11-18T02:05:21.433 回答