Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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 primefaces无法获取值_Jsf_Jpa_Primefaces - Fatal编程技术网

Jsf primefaces无法获取值

Jsf primefaces无法获取值,jsf,jpa,primefaces,Jsf,Jpa,Primefaces,当我按下这个按钮时,测试方法无法打印任何值。以及System.out.printlnperson;在handleCityChange中始终打印null,框架显示红色,右上角跳出值为无效消息。我如何解决它?谢谢大家 index.xhtml <h:body> <h:form> <p:fieldset legend="Modify" toggleable="true" toggleSpeed="200" collapsed="true">

当我按下这个按钮时,测试方法无法打印任何值。以及System.out.printlnperson;在handleCityChange中始终打印null,框架显示红色,右上角跳出值为无效消息。我如何解决它?谢谢大家

index.xhtml

<h:body>
  <h:form>
    <p:fieldset legend="Modify" toggleable="true" toggleSpeed="200" collapsed="true">
       <h:panelGrid columns="2" cellpadding="10" id="modify_change">
          <h:outputLabel value="Department :"/> 
          <p:selectOneMenu id="modify" value="#{modify.department}" style="width: 150px">
             <f:selectItem itemLabel="Choose Department" itemValue=""/>
             <f:selectItems value="#{modify.departments}" />
             <p:ajax update="modify_delete" listener="#{modify.handleCityChange()}" />
          </p:selectOneMenu>
       <h:outputLabel value="Choose Employee" />
          <p:selectOneMenu id="modify_delete" value="#{modify.person}" style="width: 150px">
             <f:selectItem itemLabel="Choose Employee" itemValue=""/>
             <f:selectItems value="#{modify.persons}" />
          </p:selectOneMenu>
       </h:panelGrid>
       <h:commandButton value="Go to Modify !" actionListener="#{modify.test()}"/>
    </p:fieldset>
  </h:form>
</h:body>
Java代码

@ManagedBean
@SessionScoped
public class modify {

  EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.mycompany_SuneCoolingSystem_war_1.0-SNAPSHOTPU");
  EmployeeJpaController jpaController = new EmployeeJpaController(null, emf);
  EntityManager e = jpaController.getEntityManager();
  private Map<String, String> departments = new HashMap<String, String>();
  private Map<String, String> persons = new HashMap<String, String>();
  private Map<String, Map<String, String>> allocatoin = new HashMap<String, Map<String, String>>();
  private String department;
  private String person;

  public modify() {
    Query q = e.createNamedQuery("Employee.findAll");
    List resultList = q.getResultList();
    for (int i = 0; i < resultList.size(); i++) {
        Employee result = (Employee) resultList.get(i);
        departments.put(result.getDepartment(), result.getDepartment());
    }
    q = e.createNamedQuery("Employee.findByDepartment");
    q.setParameter("department", department);
    resultList = q.getResultList();
  }

  public void handleCityChange() {
    if (department != null && !department.equals("")) {
        Query q = e.createNamedQuery("Employee.findByDepartment");
        q.setParameter("department", department);
        List resultList = q.getResultList();
        persons.clear();
        for (int j = 0; j < resultList.size(); j++) {
            Employee result = (Employee) resultList.get(j);
            persons.put(result.getName(), result.getName());
        }
    } else {
        persons = new HashMap<String, String>();
    }
    System.out.println(departments);
    System.out.println(department);
    System.out.println(persons);
    System.out.println(person);
  }
  public void test() {
    System.out.println(departments);
    System.out.println(department);
    System.out.println(persons);
    System.out.println(person);
  }

         //getter() and setter()
}

更改actionListener>操作:

<h:commandButton value="Go to Modify !" actionListener="#{modify.test()}"/>
致:

把所有的都放进


请注意,

您做错了几件事:

人永远不会被安排!。因此它总是null,当调用getPerson时,它将返回null,就这么简单。 您使用的是SessionScoped bean,我认为您应该使用ViewScoped bean。有关更多解释,请参阅。 您正在使用地图,您应该在其中使用列表或任何其他集合。映射用于键值对。 为什么要查询一组员工,然后通过它循环找到他们的部门?你为什么不查询一份部门列表呢?类似于从员工e中选择e.department? 构造函数的最后一部分无效。查询q不再使用,结果列表和属性部门也不再使用

您正在备份bean中使用持久性/数据库。这通常是非常糟糕的做法


我尝试了两种方法来实现和。但是测试方法不起作用。框架显示红色,右上角跳出值为无效消息,表示您试图在两次选择中立即更新?
<h:commandButton value="Go to Modify !" action="#{modify.test()}"/>
q = e.createNamedQuery("Employee.findByDepartment");
q.setParameter("department", department);
resultList = q.getResultList();