DynaForm Primefaces 扩展收集提交的数据
DynaForm Primefaces extensions gather submitted data
我在 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>
请问有人对此有什么想法吗?
谢谢。
正如 Primefaces Extensions Showcase 所说,像这样的事情就可以解决问题:
List<FilledMessageField> fields = new ArrayList<FilledMessageField>();
for (DynaFormControl dynaFormControl : model.getControls())
if (dynaFormControl.getData() instanceof FilledMessageField)
fields.add((FilledMessageField) dynaFormControl.getData());
但出于好奇,如果不使用 f
,为什么还要遍历 FilledMessageField f:allfieldMessageList
?在填充 DynaForm 控件时,您也可以只使用 List< FilledMessageField>
并将您的模型项添加到其中,这样您就不需要通过相当昂贵的 instanceof
检查将其从模型中拉出。
注:
同样使用 DynaForm
作为仅输入形式对我来说似乎有点矫枉过正。你可以只使用一个简单的 <ui:repeat>
和里面的 <p:inputText>
s,使用你的 fields
列表作为你的后备集合。
我在 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>
请问有人对此有什么想法吗?
谢谢。
正如 Primefaces Extensions Showcase 所说,像这样的事情就可以解决问题:
List<FilledMessageField> fields = new ArrayList<FilledMessageField>();
for (DynaFormControl dynaFormControl : model.getControls())
if (dynaFormControl.getData() instanceof FilledMessageField)
fields.add((FilledMessageField) dynaFormControl.getData());
但出于好奇,如果不使用 f
,为什么还要遍历 FilledMessageField f:allfieldMessageList
?在填充 DynaForm 控件时,您也可以只使用 List< FilledMessageField>
并将您的模型项添加到其中,这样您就不需要通过相当昂贵的 instanceof
检查将其从模型中拉出。
注:
同样使用 DynaForm
作为仅输入形式对我来说似乎有点矫枉过正。你可以只使用一个简单的 <ui:repeat>
和里面的 <p:inputText>
s,使用你的 fields
列表作为你的后备集合。