3

inputText フィールドを動的に配置するフォームを作成する必要があります。次のコードを使用しています。

<h:form>
    <c:forEach items="#{userBean.getFieldList()}"  var="field">
        <h:inputText value="#{userBean.getFieldValue(field.name)}" />                       
    </c:forEach> 
    <h:commandButton value="Login" action="#{userBean.loginAction}" />          
</h:form>

var フィールドはメタデータであり、フィールド値を所有するのではなく、その属性のみを所有します。だから私は使う

#{userBean.getFieldValue(field.name)}

Bean フィールド値を取得します。上記のコードは、ページを表示するためだけに使用する場合にうまく機能します。フィールド名でフィールド値を設定することはできないため、フォーム送信ではできません。問題を無効にする方法はありますか? バック Bean 編集フォームを動的に構築する一般的な方法はありますか?

4

1 に答える 1

2

それをプロパティにバインドし、動的マップ キーにMap<String, Object>ブレース表記を使用します。[]

例えば

private List<Field> fields; // +getter (no setter required)
private Map<String, Object> values; // +getter (no setter required)

public UserBean() {
    fields = populateItSomehow();
    values = new HashMap<String, Object>();
}

// ...

<h:form>
    <c:forEach items="#{userBean.fields}" var="field">
        <h:inputText value="#{userBean.values[field.name]}" />                       
    </c:forEach> 
    <h:commandButton value="Login" action="#{userBean.loginAction}" />          
</h:form>

フィールド名がマップ キーになり、フィールド値がマップ値になります。

于 2011-08-10T12:56:15.027 に答える