如何动态构建back bean编辑表单

时间:2011-08-10 11:45:14

标签: jsf jsf-2 dynamic-forms

我需要构建一个动态输入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编辑表单的方法?

1 个答案:

答案 0 :(得分:2)

将其绑定到Map<String, Object>属性,并使用大括号[]作为动态映射键。

E.g。

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>

字段名称成为地图键,字段值成为地图值。