我需要构建一个动态放置 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字段值。 如果上面的代码仅用于查看页面,则效果很好。 但不在表单提交上,因为无法通过字段名称设置Fieldvalue。 有没有办法克服这个问题?有没有一种通用的方法来动态构建后台 bean 编辑表单?
最佳答案
将其绑定(bind)到 Map<String, Object>
属性并使用大括号表示法 []
为动态 map 键。
例如
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>
字段名称成为映射键,字段值成为映射值。
关于jsf - 如何动态构建back bean编辑表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7010256/