0

私はプライムフェイスをそれほど長く使用して<p:commandButton />いませんが、メソッドに到達できないため使用できないことがわかりました。メソッドは問題ありません。テーブル(およびサブテーブル)から試してみたところ、そこで完全に機能します(すべてフォーム内にあります)、問題は、ユーザーがすべてのサブテーブルを選択できるようにする必要があることです。そのため、可能性のあるボタンを使用すると考えましたが、サブテーブルではそれが許可されていないようです。これを行うことができますか?または、サブテーブルからメソッドを呼び出すために別の方法を使用する必要があるかもしれませんが、誰かがそれについて知っていますか?

ありがとう

私のコードの一部

<h:form>
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />  
    <p:dataTable id="case" var="ticket" value="#{CaseBean.selectedCase.tickets}">
        <p:columnGroup>
            <p:row>
                <p:column> Action:</p:column>
                <p:column>
                    <!-- This doesn't work, removed. -->
                    <p:commandButton value="Aprove" action="#{CaseBean.acept()}">
                    </p:commandButton>
                </p:column>
            </p:row>
        </p:columnGroup>

        <p:subTable var="detail" value="#{ticket.detail}">
            <f:facet name="header">
                Resume:
            </f:facet>
            <!-- some data... -->
            <p:column>
                <!-- doesn't work either -->
                <p:commandButton value="Aprove" action="#{CaseBean.aceptTicket()}">
                </p:commandButton>
            </p:column>
<!-- show my data -->

テーブルは完全に機能し、すべてのデータが表示され、ログ ファイルにはエラーが表示されないため、テーブルから commandButton を書き込もうとしたときに、サブテーブル内に書き込めなくても問題なく動作しましたが、 、どうすれば表に書き込めますか?そこにも現れません。

4

4 に答える 4

1

どういたしまして:)しかし、もし私があなただったら、私はサブテーブルを使用しません.別の解決策を考えます..多分私はこのようにします.2つの異なるデータテーブルを使用します.1つ目は親リストを含み、2つ目は子を含みます.要素をリストし、選択が行われるたびに2番目のテーブルの更新がトリガーされます...IDEで試してみたところ、問題なく動作しました

<h:form id="form">
<p:dataTable var="cas" value="#{beanCase.myListOfCase}"
    selection="#{beanCase.selectedCase}" rowKey="#{cas.idCase}"
    selectionMode="single">
    <p:ajax event="rowSelect" update=":form:TicketTable" />
    <p:column headerText="Id Case">
        <h:outputText value="#{cas.idCase}" />
    </p:column>
    <p:column headerText="Case Name ">
        <h:outputText value="#{cas.caseName}" />
    </p:column>
    <p:column headerText="Case Detail">
        <h:outputText value="#{cas.caseDetail}" />
    </p:column>
    <p:column headerText="Action">
        <p:commandButton value="Accept Case" update=":form:TicketTable"></p:commandButton>
    </p:column>
</p:dataTable>
<p:dataTable id="TicketTable" var="ticket"
    value="#{beanCase.selectedCase.tickets}">
    <p:column headerText="Ticket Number">
        <h:outputText value="#{ticket.idTicket}" />
    </p:column>
    <p:column headerText="Ticket Details">
        <h:outputText value="#{ticket.labelTicket}" />
    </p:column>
    <p:column headerText="show">
        <h:outputText value="#{ticket.show}" />
    </p:column>
    <p:column headerText="this show is brought to you by">
        <h:outputText value="#{ticket.sponsor}" />
    </p:column>
    <p:column headerText="Make a Reservation">
        <p:commandButton value="Buy" action="#{beanCase.buyTicket()}">
            <f:setPropertyActionListener value="#{ticket}"
                target="#{beanCase.selectedTicket}" />
        </p:commandButton>
    </p:column>
</p:dataTable>

その前に、ケースとチケットのデータ モデル クラスを作成する必要があります。

public class CaseDataModel extends ListDataModel<Case> implements
    SelectableDataModel<Case> {
CaseDAO caseDAO = new CaseDAO();

public CaseDataModel() {
}

public CaseDataModel(List<Case> cases) {
    super(cases);
}

@Override
public Case getRowData(String arg0) {
    List<Case> listOfMyObjet = (List<Case>) caseDAO.findAll();
    for (Case obj : listOfMyObjet) {
        if (String.valueOf(obj.getIdCase()).equals(arg0))
            ;
        return obj;
    }
    return null;
}

@Override
public String getRowKey(Case arg0) {
    return String.valueOf(arg0.getIdCase());
}

}

于 2012-10-23T01:23:24.653 に答える
0

p:columnGroupJSF ページから を削除してみてください。これには必要ありません(これが問題の原因である可能性があります)。次のように考えてみてください: テーブルは行で構成され、行は列で構成されます。;-)

于 2012-10-22T05:21:48.870 に答える
0

最初の columnGroup はレンダリングされません。最初の行の列数は 2 で、1 つは「アクション」用、もう 1 つは commandButton 用ですが、サブテーブルでは 2 つの行を 1 つは「再開」用に使用し、もう 1 つは 1 つの列のみを含むためです。もう一方のコマンド ボタン。列の数はすべての行で同じでなければならないため、それを確認するにはcolspanまたはrowspanを使用する必要があります。DataTableを使用する残りの部分については、何をしたいのか正確にはわかりませんでしたが、dataTable 内の表示されたオブジェクトのリストから myObject を選択することを想定しています。したがって、これを実現するには、UidataTableがオブジェクトをバッキング Bean に返す必要があります。

public class myObjectDataModel extends ListDataModel<myObject> implements SelectableDataModel<myObject> {    

    public myObjectDataModel() {  
    }  

    public myObjectDataModel(List<myObject> data) {  
        super(data);  
    }  

    @Override  
    public myObject getRowData(String rowKey) {         
       List<myObject> listOfMyObjet = (List<myObject>) yourDao.getListOfmyOjects();//get your list

        for(myObject obj : listOfMyObjet) {  
            if(obj.getIdObject().equals(rowKey))  
                return obj;  
        }  

        return null;  
    }  

    @Override  
    public Object getRowKey(myObject obj) {  
        return obj.getIdObject();  
    }
}

バッキングされた Bean:

public class tableBean {
    private List<myObject> _Objects;
    private myObjectDataModel myListOfObjects;
    private myObject selectedObject;
    //getters and setters
    public tableBean(){
        myObjectDataModel = new myObjectDataModel(_Objects);
    }
    //...
}

xhtml:

<p:dataTable id="table" var="case"
    value="#{tableBean.myObjectDataModel}"
    selection="#{tableBean.selectedObject}" selectionMode="single"
    rowKey="#{case.IdObject}">
    <p:column>

        <p:commandButton value="
    Aprove" action="#{tableBean.someMethod()}">
        </p:commandButton>
    </p:column>

</p:dataTable>

Ajax (commandButton update 属性、または — UI を更新する) を必ず使用して<p:ajax>ください。

于 2012-10-21T08:15:37.300 に答える
0

これ#{CaseBean}を機能させるにはビュースコープ内にある必要があります。または、リクエストスコープを維持したい場合は、#{CaseBean.selectedCase.tickets}いくつかのリクエストパラメーターの(ポスト)コンストラクターで準備して、以前とまったく同じになるようにする必要があります。テーブルの表示中。

フォームが送信されると、JSF は、アクションを実行するコマンド コンポーネントを見つけるために、テーブルを繰り返し処理します。ただし、Bean がリクエスト スコープであり、#{CaseBean.selectedCase}またはの背後にある値がテーブルの表示時と同じでない場合、JSF はアクションを呼び出したボタンを識別できませ#{CaseBean.selectedCase.tickets}

以下も参照してください。

于 2012-10-23T11:22:57.120 に答える