如何动态构建一个后端Bean编辑表单

3
我需要动态构建一个表单,其中包含inputText字段,我正在使用以下代码:

我需要动态构建一个表单,其中包含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>

变量字段是元数据,不占有字段值,只占有其属性。因此我使用

#{userBean.getFieldValue(field.name)}

获取bean字段值的方法。 如果只是用于查看页面,则上述代码可以正常工作。 但在表单提交时,由于无法按字段名称设置Fieldvalue,因此无法正常工作。 是否有一种方法来解决这个问题?是否有一种通用的方法来动态构建后端bean编辑表单?

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>

字段名称变成映射键,字段值变成映射值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接