我在Primefaces扩展中使用DynaForm。我已经生成了一个动态表单,但问题是如何从控制器中恢复提交的数据。
下面是我如何生成我的表单:
这是控制器的一面
model = new DynaFormModel();
DynaFormRow row;
allfieldMessageList=getAllfieldMessageList();
for(FilledMessageField f:allfieldMessageList)
{
// 1. row
row = model.createRegularRow();
FilledMessageField fmf=new FilledMessageField();
DynaFormLabel label11 = row.addLabel(fmf.getField().getName());
DynaFormControl control12 = row.addControl(fmf, "input");
label11.setForControl(control12);
}这是网页的一面:
<h:form id="addMessageIDForm" rendered="true">
<pe:dynaForm id="dynaForm" value="#{messageValuesController.model}"
var="data" widgetVar="dynaFormWidget" >
<pe:dynaFormControl type="input" for="txt" >
<p:panelGrid columns="2">
<p:inputText id="txt" value="#{data.value}"
required="#{data.required}" />
</p:panelGrid>
</pe:dynaFormControl>
</pe:dynaForm>
<p:commandButton value="Submit" action="#{messageValuesController.saveMessageTemplate}" process="dynaForm" />
</h:form>有人知道这件事吗?
谢谢。
发布于 2015-06-05 15:52:36
正如素数面扩展展示所指出的,类似这样的东西会起作用:
List<FilledMessageField> fields = new ArrayList<FilledMessageField>();
for (DynaFormControl dynaFormControl : model.getControls())
if (dynaFormControl.getData() instanceof FilledMessageField)
fields.add((FilledMessageField) dynaFormControl.getData());但出于好奇,如果不使用FilledMessageField f:allfieldMessageList,为什么要迭代f呢?在填充List< FilledMessageField>控件时,您可以只使用一个DynaForm并将您的模型项添加到它中,这样就不需要使用昂贵的instanceof检查将其从模型中提取出来。
注:
此外,对我来说,只对输入表单使用DynaForm似乎有点过分。您可以使用一个简单的<ui:repeat>,其中包含<p:inputText>,使用fields列表作为支持集合。
https://stackoverflow.com/questions/30669250
复制相似问题