1

当使用primefaces dynaform(0.7.1 版)时,我总是得到 null 作为从动态表单返回的值。

我的xhtml:

<h:form id="messageParamsForm" styleClass="formBlock dynaForm">
            <pe:dynaForm id="dynaForm" value="#{editParametersBean.formModel}" var="data">
                <pe:dynaFormControl type="textfield" for="textfield">
                    <p:inputText id="txt" value="#{data.value}" />
                </pe:dynaFormControl>

                <pe:dynaFormControl type="grouplabel" for="grouplabel">

                </pe:dynaFormControl>

                <pe:dynaFormControl type="separator" for="separator">
                    <p:separator />
                </pe:dynaFormControl>

                <pe:dynaFormControl type="checkbox" for="checkbox">
                    <p:selectBooleanCheckbox id="checkbox" value="#{data.value}"/>
                </pe:dynaFormControl>
            </pe:dynaForm>
<div class="buttonsBlock">
                <p:commandButton value="#{msg['button.apply']}"
                                 update="@form"
                                 action="#{editParametersBean.save()}"
                                 styleClass="primaryButton"/>
        </div>
        </h:form>

这就是我创建表单模型的方式

formModel = new DynaFormModel();
        for (MessageParamValueDto parameterValue : messageParameterValues) {
            DynaFormRow row = formModel.createRegularRow();
            DynaFormLabel label = row.addLabel(parameterValue.getParameter().getLabel(), 1, 1);
            DynaFormControl control = row.addControl(parameterValue, parameterValue.getParameter().getType(), 1, 1);
            label.setForControl(control);
        }

Bean 是视图范围的。

这是 DTO

public class MessageParamValueDto {

    private MessageParameter parameter;
    private Object value;

    public MessageParamValueDto(MessageParameter parameter, Object value) {
        this.parameter = parameter;
        this.value = value;
    }

    public MessageParamValueDto() {
        // NO CODE
    }

    public MessageParameter getParameter() {
        return parameter;
    }

    public void setParameter(MessageParameter parameter) {
        this.parameter = parameter;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }
}

当我在保存方法中处理表单时,所有 dto 都具有空值。我有时也会得到Component ID ... has already been found in the view.但它完全是不确定的。

4

1 回答 1

1

你认为你为什么要处理表格?process 属性的值默认为@this。您应该将进程指向 pe:dynaForm。尝试 process=":messageParamsForm:dynaForm" 或 process="dynaForm"。

于 2013-11-06T22:12:39.410 回答