Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 使用dataTable时未调用JSF2.0支持bean setter_Jsf 2 - Fatal编程技术网

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方法,因此对于阅读/维护代码的其他人来说是一个非常令人困惑的名称

另见:

您是否使用h:commadButton如果是,那么您是否从h:form调用它。如果这不能解决您的问题,请发布完整的InfoPlet页面。请提供完整的表单代码和
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");
    }

}
     }