web-dev-qa-db-ja.com

action = "@ this"を明示的にp:commandButtonに追加してアクションを呼び出す理由

明示的に追加する必要があることはわかっていますprocess="@this"を取得するにはp:commandbuttonアクションが呼び出され、プロセス属性のデフォルトが@formプライムフェイス。

プロセスはデフォルトで@formボタンがフォーム内の他の要素とともに処理されるべきではなく、そのアクションが呼び出されるべきです。

この背後にある正確な理由を誰かが説明できますか?

12
Srikanth Ganji

プロセス_@form_は、現在の形式の_commandLink/Button_を意味します
プロセス_@this_は、_commandLink/Button_の現在のコンポーネントを意味します。以下のコードを確認してください。

process.xhtml

_<h:form id="form1">
    <h:inputText value="#{ProcessBean.id}" id="id"/><br/>
    <h:panelGroup id="panel_1">
        <h:inputText value="#{ProcessBean.name}" id="name"/><br/>
    </h:panelGroup>
    <h:panelGroup id="panel_2">
        <h:inputText value="#{ProcessBean.address}"/>
        <br/>
        <p:commandButton process="@form" value="Btm1" id="button1" action="#{ProcessBean.show}"/><!-- Default -->
        <p:commandButton process="@this" value="Btm2" id="button2" action="#{ProcessBean.show}"/>
        <p:commandButton process="@this form1:panel_1" value="Btm3" id="button3" action="#{ProcessBean.show}"/>
    </h:panelGroup>
</h:form>  
_

ProcessBean.Java

_@ManagedBean(name = "ProcessBean")
public class ProcessBean {
    private String id;
    private String name;
    private String address;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    public void show() {
        System.out.println(id);
        System.out.println(name);
        System.out.println(address);
    }
}
_

ユーザー入力inputboxをしましょう

_001     -> id
Jone    -> name
London  -> address
_

_button1_をクリックすると、フォーム全体のJSF component(Eg : id, name, address)全体が処理されます。出力は次のようになります:

_001
Jone
London
_

_button2_をクリックします。プロセスはそれ自体になります(例:button2)。 _id, name, address_のプロセスはありません。出力は次のようになります。

_null
null
null
_

_button3_をクリックすると、_panel_1_と_button3_のすべてのJSF component(Eg : name)全体が処理されます。出力は次のようになります:

_null
Jone
null
_

アクションメソッドを呼び出しませんか?呼び出す前に検証または変換が失敗した可能性があります。

35
Zaw Than oo