0

クライアントのリストと 1 つの Edit commandLink 列を含むこの dataTable があります。クライアントのデータを表示するためにダイアログを開く必要があり、dataTable の行に使用される変数cliを使用して、f:setPropertyActionListener を使用して Client オブジェクトを Bean ダイアログに送信しようとしています。

<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 はクライアント型であり、そのゲッターとセッターは正しいと確信しています。

何らかの方法で 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 に答える