DynaForm Primefaces扩展程序收集提交的数据

时间:2015-06-05 14:35:36

标签: jsf primefaces primefaces-extensions

我在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>

请有人对此有任何想法吗?

谢谢。

1 个答案:

答案 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 列表作为支持集合。