richfaces ajax特性的一点小提示(为什么数据传不到后台去?)
程序员文章站
2024-03-12 19:44:56
...
问题描述:
页面文件:
<h:outputText value="类型:" id="assessType_inputtext"></h:outputText>
<h:selectOneListbox size="1" id="assessTypeId"
value="#{agcExceptionDataBackBean.assessTypeId}">
<f:selectItems value="#{agcExceptionDataBackBean.agcSelectItems}"/>
<a4j:support event="onchange" reRender="outputPanelId" />
</h:selectOneListbox>
<h:panelGrid columns="3"
rendered="#{agcExceptionDataBackBean.view}">
<h:outputText value="容量:" id="realAdjustCapacity_outputtext" />
<h:inputText id="realAdjustCapacity_inputtext"
value="#{agcExceptionDataBackBean.currentAgcExceptionData.realAdjustCapacity}">
<a4j:support ajaxSingle="true"
event="onblur" reRender="realAdjustCapacity_message" />
</h:inputText>
<a4j:outputPanel id="realAdjustCapacity_message"
ajaxRendered="true" styleClass="pfoutpanel">
<h:message for="realAdjustCapacity_inputtext"></h:message>
</a4j:outputPanel>
</h:panelGrid>
<a4j:commandButton value="保存"
action="#{agcExceptionDataBackBean.createAgcExceptionData}"
styleClass="pfbutton">
</a4j:commandButton>
ManagerBean的方法:
public boolean isView() {
if (getAssessTypeId() != null) {
AssessType type = assessTypeService.get(assessTypeId);
CommonGenerator gen = commonGeneratorService
.getByGeneratorCode(generatorCode);
if (type != null
&& type.getAssessTypeName().equals("不达标")) {
return true;
}
}
return false;
}
public Long getAssessTypeId() {
return assessTypeId;
}
根据”类型“来判断”容量“这个panelGrid是否显示
当容量显示时,并输入数据如:100
当点保存,照理说会把容量的数据100传到后台去。
但是它并没有传。
跟了一下代码,原来在ApplyRequestValue这个生命周期中h:panelGrid 的processDecode
系统会先去检查h:panelGrid是否渲染,而此时的类型数据assessTypeId还没更新到模型中去(是在UpdateModel生命周期执行)。
所以getAssessTypeId()返回null
isView()也有返回false
因此就不会processDecode容量,因此它的数据也就不会传到后台
解决方法:
可以改变getAssessTypeId()方法:
public Long getAssessTypeId() {
if (assessTypeId == null) {
String temp = FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get(
"formId:assessTypeId");
if (temp != null) {
assessTypeId = Long.valueOf(temp);
}
}
return assessTypeId;
}
上面的方法,把数据提前取出来。
我觉得不是王道,不知道有没有更好的方法?
生命周期图:
上一篇: Vuex 白话教程第四讲:Vuex 旗下的 Action
下一篇: richfaces 使用问题集