2012-04-30 10 views
6

私はJSF 1.1を使用しています。リクエストスコープのBeanと読み取り専用の入力フィールドを持つJSFページがあります。<h:inputText readonly = "true">のデータは、コマンドボタンをクリックすると消えます。

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

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

これはどのようにして解決できますか?

+5

SOの質問に回答している人は、魔術師と見なされるかもしれませんが、コードサンプルなしで何もできません**。 – maialithar

+0

'cal(いくつかの文字列変数)'メソッドで何が起こっているのか分かりません... – maialithar

+0

readonlyがtrueに設定されていれば、#{bean.sdate}の値はサーバに送られません。失われた... – Daniel

答えて

18

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

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

注:JSF2にあなたにもビューに#{facesContext}FacesContext#getCurrentInstance()にアクセスすることができ、このモデルでは、いくつかの定型を保存します。

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

はまた、その後、あなたはJSF2 <f:viewParam>を使用しているときに注意このアプローチは、もはやGETリクエストでは機能しません。説明と回避策については、Make a p:calendar readonlyも参照してください。

+0

同時に "プロセスの検証"のような他の段階でモデルを更新したいと思っていたらどう思いますか? 。 – Addicted

関連する問題