我需要构建一个动态输入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编辑表单的方法?
答案 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>
字段名称成为地图键,字段值成为地图值。