2010-12-27 18 views
1

DataTable内にcommandButtonがあります。しかし、「アクション」はクリックしても呼び出されません(actionListenerと同じ効果)。サーバーアクションの始めにログを追加しましたが、これは決して表示されません。 データリストの外側にあるボタンが正常に機能することに注意してください。ここでJSF-p:dataTable-p:p:column内でもcommandButtonが機能しない

は私のコードです:

<h:form id="compSearchForm"> 
    <p:dataTable var="competency" value="#{competencySearchBean.matchingCompetencies.toArray()}"> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputLabel value="Title" /> 
      </f:facet> 
      <h:outputText value="#{competency.title}" /> 
     </p:column> 

     <p:column> 
      <p:commandButton value="Go" id="actionButton" action="#{myBean.doAction}" /> 
     </p:column> 
    </p:dataTable> 
</h:form> 

あなたは問題が何であるかについてどのような考えを持っていますか?

答えて

1

私はあなたのボタンの列コードを既存の鉱山に追加しました。このメソッドは、ボタンを押すと正しく呼び出され、正しく動作します。ここで私は私のdataTableに追加したコードは次のとおりです。ここで

<p:column> 
    <p:commandButton value="Go" id="actionButton" action="#{tableBean.buttonAction()}" /> 
</p:column> 

は私のバッキングBeanでbuttonAction方法である:

public void buttonAction() 
    { 
     int a = 0; 
     for(int i = 0; i < 100; i++) 
      a = i; 
    } 

私は、このメソッドにブレークポイントを置くので、私はそれがときに呼び出さなっている知っています私はボタンをクリックします。 私は一歩進んで、あなたのdatatableコード(私のデータソースで)を使用し、ボタンを押すとメソッドはまだ呼び出されています。私はどの開発環境を使用しているのかわかりませんが、デバッグモードを持っている場合は、doActionメソッドとその他の戦略的な場所にブレークポイントを設定し、デバッグモードでプロジェクトを実行して何が起こっているのかを確認します。

+0

助けてくれてありがとうSean。私はTomcat 7、JSF 2.0、PrimeFaces 2.2RC1です。私の呼び出しの間に明白な違いは、あなたがかっこで "buttonAction()"を呼び出すことです。私はそれを試み、あなたに知らせるでしょう。 –

+0

うまくいくようです:)あなたの助けをありがとう(括弧を追加するとそれがうまくいくのは変ですが)。 –

0

私はあなたに変更する必要が思う:

<h:form id="compSearchForm"> 
<p:dataTable var="competency" value="#{competencySearchBean.matchingCompetencies.toArray()}"> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputLabel value="Title" /> 
     </f:facet> 
     <h:outputText value="#{competency.title}" /> 
    </p:column> 
</p:dataTable> 
<p:commandButton value="Go" id="actionButton" action="#{myBean.doAction}" /> 
</h:form> 

私はあなたがのdataTable内のボタンを持つことができるとは思いません。これを試して。

+0

これは実際に動作しますが、正確には私がしたいことではありません。各行にボタン/リンク/アイコンがありたいと思います。ユーザーがクリックすると、行データに応じたアクションが実行されます。 –

+0

seamを使用している場合は、必要に応じて動作する 's:button 'を使用できます。これは、POSTではなくGETを実行するためです。また、各行を投稿する場合は、各行が独自のフォームを取得できるように、データシート内に ' 'をカプセル化することもできます。 –

+0

データテーブル内に新しいf:フォームを追加しようとしましたが、もう表示されます。しかし、JavaScriptエラーはないので、私は本当に理由を知らない。 –

0

私は同じ問題を抱えていましたが、別の方法で試してみましたが、私はList(私がp:datatableで使用しているリスト)をのの方法。

このフォームでは、リストはいくつかの値を持つページに移動します。

List<Paciente> myList = new ArrayList<Paciente>();を入れても動作しませんでした。 私はリストにいくつかの値を入れなければなりません。これが問題を解決する唯一の方法でした。

+0

私は正直なところ、この答えがこの問題に関連していると疑っています。 – Kukeltje