6

JSF1.1を使用しています。リクエストスコープのBeanと読み取り専用の入力フィールドがあるJSFページがあります。

<h:inputText id="dt" value="#{bean.sdate}" readonly="#{bean.disable}" />
<a onclick="cal('dt');"><img src="fr.gif" border="0"></a>

JavaScriptを使用して入力値を設定し、コマンドボタンをクリックすると、入力フィールドのデータが消えます。

これはどのように引き起こされ、どうすれば解決できますか。

4

1 に答える 1

19

これは、プロパティがに設定されているためreadonlyです。これが評価された場合true、JSFは送信された値を処理しないため、モデルは更新されません。readonlyビューのレンダリング時に設定し、JSFに送信された値を処理させる場合は、レンダリング応答フェーズでのみ評価するように設定するtrue必要があります。これに使用できますFacesContext#getRenderResponse()。メソッドでこれを行う必要がありますisDisable()

public boolean isDisable() { // TODO: rename to isReadonly().
    return FacesContext.getCurrentInstance().getRenderResponse();
}

注:JSF2では、ビューからもアクセスできます。これFacesContext#getCurrentInstance()により#{facesContext}、モデルの定型文が節約されます。

<h:inputText ... readonly="#{facesContext.renderResponse}" />

また、JSF2を使用している場合<f:viewParam>、このアプローチはGETリクエストでは機能しなくなることにも注意してください。説明と回避策については、「ap:calendarを読み取り専用にする」も参照してください。

于 2012-04-30T18:26:18.910 に答える