0

私は p:datatable で primefaces commandLink を使用しており、ユーザーがリンクをクリックしたときに使用しています。テーブルから選択されたオブジェクトの特定の情報を含む別のページに移動することになっています。ajax タグは使用しません。問題は、リンクを初めてクリックしたときにアクションが呼び出されず、実際には何も起こらず、2 回目のクリックで機能することです。これが私のコードです:

データテーブルを使用した JSF

<h:form>
        <h:outputText value="Nothing is found" rendered="#{searchView.citizenSearchList.rowCount==0}"/>

        <p:dataTable var="cust" value="#{searchView.citizenSearchList}" dynamic ="true" paginator="true" rows="5" paginatorAlwaysVisible="false" style="width: 700">
            <p:column>
                <f:facet name ="header">
                    <h:outputText value="name "/>
                </f:facet>
                <h:outputText value="#{cust.name}"/>
            </p:column>
            <p:column>
                <f:facet name ="header">
                    <h:outputText value="lastname "/>
                </f:facet>
                <h:outputText value="#{cust.citizenList.get(0).lastname}"/>
            </p:column>
            <p:column>
                <f:facet name ="header">
                    <h:outputText value="Id "/>
                </f:facet>
                <h:outputText value="#{cust.registernumber}"/>
            </p:column>
            <p:column>
                <f:facet name ="header">

                </f:facet>
                <p:commandLink value="See" action="#{customerView.prepareCitizenView()}"/>
            </p:column>
        </p:dataTable>

    </h:form>

ManagedBean: customerView のアクション メソッド

@ManagedProperty(...)  
SearchView searchview;
public String prepareCitizenView(){
    this.customer = (Customer) searchview.citizenSearchResultList.getRowData();
    if(this.customer != null)
        return "citizeninfo";
    else
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "no data.", "no data"));
        return null;


}

ManagedBean: searchView

DataModel citizenSearchResultList;

public DataModel getCitizenSearchResultList() {
    return citizenSearchResultList;
}
4

3 に答える 3

0

同じページにリダイレクトを返すことができます。customerView.prepareCitizenView は、リダイレクトで同じページを再実行できます。お気に入り

return "citizeninfo.jsf?faces-redirect=true";

この「jsf」は、使用するものに応じて変化します

于 2013-04-04T13:09:46.450 に答える
0

mehmet cinar が述べたように、解決策はナビゲーションの結果にリダイレクトを使用することです。私は自分でこの問題を抱えていました。

return "citizeninfo.jsf?faces-redirect=true";

私が推測できたことから、その理由は ajax 送信に新しいページの ViewState リクエスト パラメータが含まれないためです。初めて ViewState がなければ、事態は壊れます。

リダイレクトを実行すると、リダイレクトの Viewstate パラメータがリクエストに正しく追加され、ボタンを初めてクリックできるようになります。

于 2013-04-08T13:54:13.093 に答える