0

私はこれが初めてで、primefaces を使用して動的テーブルを生成しています。このデータテーブルはマネージド Bean によって作成されたリストから値を取得します。

データテーブルによって生成された列の値を使用して、別のマネージド Bean のプロパティを設定する必要があります。

例: Col1 には特定の値があり、その値をクリックすると、その col1 値を表示するダイアログ ボックスが表示されます。

<p:dataTable id="dataTable" var="c" value="#{databaseSearch.customerList}"  
                                     paginator="true" rows="10" paginatorAlwaysVisible="false"
                                     paginatorTemplate="Page {CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}  Rows per page {RowsPerPageDropdown}"  
                                     rowsPerPageTemplate="5,10,15,30">     
<p:column>  
    <f:facet name="header">  
      <h:outputText value="Machine" />  
    </f:facet>  
    <p:commandButton id="xxx" value="#{c.machine}" action="#{updateEntry.setMachine(c.machine)}" ajax="true" onclick="dlg1.show();" styleClass="ui-Machinebutton"/>
                                    <!-- styleClass="ui-Machinebutton" -->
                            </p:column>

マネージド Bean 'updateEntry' には、getter メソッドと setter メソッドがあります。

@ManagedBean
@SessionScoped
public class UpdateEntry implements Serializable {

   public Long Machine;

    public Long getMachine() {
        return Machine;
    }

    public void setMachine(Long Machine) {
        this.Machine = Machine;
    }


}

ダイアログボックス

<p:dialog id="modalDialog" header="Modal Dialog" widgetVar="dlg1" modal="true" height="100" dynamic="True">  
<h:outputText value="#{updateEntry.machine}" />  
</p:dialog>

ダイアログ ボックスにパラメーターを渡すには、マネージド Bean の助けが必要であることは理解しています。ただし、データテーブルはランダムに生成され、その特定のランダム値を渡すことができません。では、コマンド ボタンのランダムな値を渡し、クリックされたときにマネージド Bean を設定するにはどうすればよいでしょうか。

目的

コマンド ボタンをクリックすると、その値がマネージド Bean に渡されます。これはランダムに生成された dataTable であるため、どのようにそれを達成できるかわかりません。

アップデート

できます !同じコードが updateEntry.machine を更新しますが、問題は、updateEntry.machine が新しい値に更新される前に、ボタンをクリックするとダイアログ ボックスが最初に開くため、ダイアログ ボックスには以前にクリックしたオプションが表示されることです。「アクション」は「オンクリック」の前に発生しますか? それとも逆ですか?最初に Bean を更新してから、ダイアログ ボックスを開いて新しい値を表示する必要があります。ダイアログボックスの動的プロパティのTrueとFalseの両方を試しましたが、それが何のためにあるのかわかりません。

また、ダイアログ ボックスにロードされた新しい値を取得するためにページを更新する必要があります。それ以外の場合は、どのコマンド ボタンをクリックしても、最初にクリックしたコマンド ボタンの値が表示されます。ページの更新を投稿すると、コマンドの値が表示されます。ボタンが最後にクリックされました。

4

2 に答える 2

0

私は問題を見つけました...

コードを以下に変更したところ、うまくいきました!

<p:commandButton id="basic" value="#{c.machine}" action="#{updateEntry.setMachine(c.machine)}" ajax="true" oncomplete="dlg1.show();" styleClass="ui-Machinebutton"/>

ここでのトリックは、最初に「Machine」変数を設定し、完了時に同じ「Machine」変数を読み取るダイアログ ボックスをロードすることでした。

于 2013-07-30T15:41:15.573 に答える