0

入力 Textarea 値が Bean 側で設定されることはありません。JSF 1.2 と RichaFaces 3.3.3。次のコードがあります:

<h:form id="name" rendered="#{not empty controller}">
            <h:panelGrid columns="1" styleClass="medium" columnClasses="subtitle,medium" style="text-align: left;" cellspacing="3px">
                <f:facet name="header">
                    <h:outputText value="Comments"/>
                </f:facet>

                <h:inputTextarea value="#{controller.comments}" rows="10" cols="80"
                        immediate="true"></h:inputTextarea>

                <div align="right">
                    <a4j:commandButton value="#{msg['label.save']}" action="#{controller.saveData()}" reRender="name" />
                </div>
            </h:panelGrid>
        </h:form>

そして豆で:

public void saveData(){
    //logic
}

public String getComments(){
    return "comments";
}

public void setComments(String comments){
    //logic
}

jsf ページは、ui:include を介して別のページに含まれ、必要な Bean をコントローラーパラメーターとして取得します。

コメントは get メソッドを介して読み取られますが、setter は呼び出されず、saveData関数も呼び出されません。同じコントローラーが別のページの他のデータに使用され、文字通り同じsaveDataメソッドがうまく機能します。Textarea の値が設定されないのはなぜですか?

4

1 に答える 1

1

あなたが得ているエラーは、この行のものです:

<a4j:commandButton value="#{msg['label.save']}"
    action="#{controller.saveData()}" reRender="name" />

JSF1.2 では、アクションで括弧を使用しないでください。変更してください

<a4j:commandButton value="#{msg['label.save']}"
    action="#{controller.saveData}" reRender="name" />

また、投稿するページが呼び出し時に別のフォーム内にないことを確認してください。

アップデート:

あなたの最後のコメントに基づいて、あなたの問題は次の文にあると思います:

<h:form id="name" rendered="#{not empty controller}">

がリクエスト Bean の場合controller、リクエストでは空になるため、yout フォーム内の値は送信されず、アクティブ化されません。Bean をリクエスト スコープで保持し、Bean クラスに @KeepAlive アノテーションを追加することができます。

@KeepAlive(ajaxOnly=false)
public class ControllerBean {
    //your bean logic...
    public void saveData(){
    //logic
    }

    public String getComments(){
        return "comments";
    }

    public void setComments(String comments){
        //logic
    }
}
于 2012-04-05T13:40:08.340 に答える