当使用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.
但它完全是不确定的。