我在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>
请有人对此有任何想法吗?
谢谢。
答案 0 :(得分:0)
正如Primefaces Extensions Showcase所述,这样的事情可以解决问题:
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
?在填充DynaForm控件时,您也可以只使用List< FilledMessageField>
并将模型项添加到其中,这样您就不需要通过相当昂贵的instanceof
检查将其从模型中拉出来。
注意:强>
同样使用DynaForm
作为输入表格似乎对我来说太过分了。您可以使用<ui:repeat>
内置<p:inputText>
的简单fields
,使用python manage.py runserver yourdomain.com:80
列表作为支持集合。