2012-02-16 10 views
3

のは を言ってみましょう私は、属性 "してinitail"JSF inputTextに初期値を設定し、制御値を別のプロパティにサブミットするにはどうすればよいですか?

<h:dataTable var="s" value#{somebean.properties}> 
<h:column> 
    <h:inputText initial=#{s.min} value=#{somebean.mintmp}/> 
    <h:commandButton action=#{filterbean.addProretryFilter(s.id, somebean.mintmp)} /> 
</h:column> 
</h:dataTable> 

を持っているのinputTextで終了しません。 希望の機能を実装する方法はありますか?

答えて

5

入力テキストフィールドをバッキングBeanにバインドし、コンストラクタまたは@PostConstructで初期化して初期値を設定することができます。ビューで

@ManagedBean 
    public class Bean{ 

     private HtmlInputText inputComponent = new HtmlInputText(); 
     private String min = "5"; 
     private String minData; 

     @PostConstruct 
     public void init(){ 
     inputComponent.setValue(min); 
     } 

     //....get/set other logic 

    } 

あなたは

<h:inputText value="#{bean.minData}" binding="#{bean.inputComponent}"></h:inputText> 
+0

これは、値が現在のデータテーブル行オブジェクトに依存するOPの場合は機能しません。 – BalusC

+0

はい!それはまさに私が必要なものです。 – avgusti

+0

@gbagga inputTextがdataTableの内部にある場合に、私たちの提案をどのように使用するかについてのサンプル(または単なるアイデア)を提供できますか? – avgusti

0

をマネージドBeanのゲッターで使用すると、デフォルト値を返すことができます。例えば。

private String mintmp=null; 

public String getMintmp() 
{ 
    if(mintmp == null) 
    return "default min"; 
    return mintmp; 
} 
+1

私はこれがOPが望むものではないと思います。あなたの例では、デフォルト値はフォーム送信時に保存され、それは望ましくありません。あなたはデフォルト値を無視するようにセッターを適応させることもできます。 –

+0

はい、それは簡単な修正です。 setterに別のチェックを追加してデフォルト値かどうかを確認するだけです。 – reederz

+0

実際、私の場合は許容値を持つリストの母集団です。 – avgusti

0

あなたのデザインを再考する必要があると思います。デフォルト値を入力しなくても問題があります。この擬似コードは、あなたのロジックとほぼ似ています。

//beans 
SomeBean somebean = ... 
DataModel model = ... 
FilterBean filterbean = ... 
//apply request values phase 
for(int i=0; i<model.getRowCount(); i++) { 
    model.setRowIndex(i) 
    S s = model.getRowData() 
    //inputText's state is set to the submitted row state by the dataTable 
    Object submittedValue = inputText.getSubmittedValue() 
    somebean.mintmp = submittedValue 
} 
//invoke application phase 
for(int i=0; i<model.getRowCount(); i++) { 
    model.setRowIndex(i) 
    S s = model.getRowData(); 
    //commandButton's state is set to the submitted row state by the dataTable 
    if(commandButton.clicked()) { 
    filterbean.addProretryFilter(s.id, somebean.mintmp) 
    } 
} 

somebeanは常に最後の行の値が取り込まれます。

詳細については、JSF lifecycleおよびDataModelを参照してください。

-1

使用primefacesを持つことができます!更新したいコンポーネントを更新するボタンには、この本当に素晴らしい更新属性があります。それは魔法です。

関連する問題