【问题标题】:DynaForm Primefaces extensions gather submitted dataDynaForm Primefaces 扩展收集提交的数据
【发布时间】:2015-06-05 14:35:36
【问题描述】:

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

请问有人知道吗?

谢谢。

【问题讨论】:

    标签: jsf primefaces primefaces-extensions


    【解决方案1】:

    正如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&lt; FilledMessageField&gt; 并将您的模型项添加到其中,这样您就不需要通过相当昂贵的 instanceof 检查将其从模型中拉出。

    注意:
    同样使用DynaForm 作为输入表单对我来说似乎有点过头了。你可以只使用一个简单的&lt;ui:repeat&gt;,里面有&lt;p:inputText&gt;s,使用你的fields列表作为你的支持集合。

    【讨论】:

    • 谢谢你的回答,关于变量的事情,这只是一个复制错误。我想我发现了我的问题,即使使用 ajax 提交表单,postconstructer 函数也会被调用并重新初始化我的模型
    • 我打算尽快添加其他输入类型。
    • @Badis 考虑将您的 Bean 设为 Viewscoped 而不是 requestscoped。
    • 是的 Zhedar 这就是我在其他 stackoverflow 问题上发现的,但是这个控制器已经在 @ViewScoped 上 ..
    • 谢谢Zhedar 我解决了我刚刚删除postconstruct函数的问题...
    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2012-06-20
    相关资源
    最近更新 更多