0

dataTable で選択したデータを取得するにはどうすればよいですか? レジスターの「編集」なのでこの方法を使っています。

    <p:dataTable id="dataTable" var="valor" style="width:100%; text-align:center" 
      value="#{beanMensagemXContato.dataModelMsg}"  
      selection="#{beanMensagemXContato.selectedMensagemAssociada}" 
      paginator="true" rows="6" >

       <f:facet name="header">  
           Mensagens  
       </f:facet>   
       <p:column  style="width:5%">
           <p:selectBooleanCheckbox value="#{valor.associada}" >       
                <p:ajax process="@form" event="valueChange"  listener="#   {beanMensagemXContato.adicionarMensagemContato}">                
                <f:param name="messageSelecionada" value="#{beanMensagemXContato.msgAssociada}" />
                </p:ajax>
           </p:selectBooleanCheckbox>
       </p:column>   
...
</p:dataTable>

イベント SelectEvent として Bean でデータを選択します。

public void adicionarMensagemContato (SelectEvent event){

    Mensagem mensagem = ((MensagemAssociada) event.getObject()).getMensagem();
    MensagemAssociada mensagemAssociada = (MensagemAssociada) event.getObject();

...

}

しかし、イベント ValueChange でデータを取得できませんでした。タグ selectionMode = "multiple" で SelectEvent を試してみましたが、その時点で選択されたデータを取得できましたが、以前に選択してデータベースから読み取ったデータは表示されず、xhtml で上記の方法でのみ使用します。

すでに私は助けに感謝しています。

4

1 に答える 1

0

選択は Bean フィールドに保存されます。

selection="#{beanMensagemXContato.selectedMensagemAssociada}" 

adicionarMensagemContato メソッドが同じ Bean にある場合、問題なく選択にアクセスできます。

public void adicionarMensagemContato (SelectEvent event){
    doSomething(this.selectedMensagemAssociada);
}

もう 1 つの方法は、f:setPropertyActionListener を使用することです。これにより、現在の行の要素を Bean フィールドに格納できます (以下の例は、ボタンのクリックによって呼び出されるアクションで現在の要素にアクセスする方法を示しています)。

<p:dataTable var="objectFromCurrentRow" ...>
  ...
  <p:column ...>
    <p:button ... action=#{beanMensagemXContato.performAnActionOnCurrentElement} ...>
      <f:setPropertyActionListener value="#{objectFromCurrentRow}" target="#{beanMensagemXContato.selectedMensagemAssociada}" />
    </p:button>
    ...
于 2013-10-21T12:14:35.277 に答える