Jsf 2 使用dataTable时未调用JSF2.0支持bean setter
我有一个屏幕,我在其中使用Jsf 2 使用dataTable时未调用JSF2.0支持bean setter,jsf-2,Jsf 2,我有一个屏幕,我在其中使用 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:body> <h:form> <f:event listener="#{p
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<h:form>
<f:event listener="#{pageload.getPageLoad}" type="preRenderView" />
<h:dataTable value="#{pageload.fieldConfig}" var="field"
columnClasses="lblFirstCol,lblSecondCol,lblThirdCol,lblFourthCol" id="table1" styleClass="tblSecond" >
<h:column >
<h:outputText value="#{field.label_name}" />
</h:column>
<h:column>
<h:inputText value="#{searchdevice.device.terminal_name}" />
</h:column>
</h:dataTable>
<h:commandButton value="Submit" action="#{searchdevice.searchButtonAction}"/>
</h:form>
</h:body>
我的设备对象具有terminal_name属性。我有一个命令按钮,它调用SearchDeviceBean中的方法,在提交表单时,我输入的任何值都不会被填充
感谢您在
preRenderView
事件中执行数据初始化逻辑的任何帮助。这对于需要为回发准备模型的代码来说是错误的。当JSF需要在表单提交期间更新模型值时,它遇到一个完全空的fieldConfig
,因此JSF无法在其中设置提交/转换/验证的值。在您的情况下,fieldConfig
仅在稍后的阶段,即渲染响应阶段准备,因此已经太晚了
您需要在@PostConstruct
中对其进行初始化。它在bean的构造和依赖项注入后立即被调用。完全去掉整个
,并在getPageLoad()
方法上添加一个@PostConstruct
注释。顺便说一下,我还将该方法重命名为init()
或loadFieldConfig()
,因为它根本不是一个getter方法,因此对于阅读/维护代码的其他人来说是一个非常令人困惑的名称
另见:
SearchDeviceBean
类代码。请提供。否则你不太可能得到帮助,因为有太多的地方可能会出现错误。是的,我使用commandButton。如果我让我的支持bean会话得到处理,我的完整代码就可以了。在RequestScopedHanku@BalusC中不工作,我现在明白了区别,它现在对我来说很好
@ManagedBean(name="pageload")
@RequestScoped
public class PageLoadBean {
private List<FieldConfigVO> fieldconfig;
//getters and setters
// method to populate the ArrayList
public void getPageLoad(){
//getting populated from Database
fieldconfig = common.getFieldConfig("001");
}
}
@ManagedBean(name="searchdevice")
@RequestScoped
public class SearchDeviceBean {
private DeviceVO device;
public SearchDeviceBean() {
device = new DeviceVO();
}
public DeviceVO getDevice() {
return device;
}
public void setDevice(DeviceVO device) {
this.device = device;
}
public String searchButtonAction(){
System.out.println(device.getTerminal_name()+"****TERMINAL NAME******");
FacesContext context = FacesContext.getCurrentInstance();
if (context.getMessageList().size() > 0) {
return(null);
}else {
return("success");
}
}
}