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 列表作为你的后备集合。