Jsf primefaces无法获取值
当我按下这个按钮时,测试方法无法打印任何值。以及System.out.printlnperson;在handleCityChange中始终打印null,框架显示红色,右上角跳出值为无效消息。我如何解决它?谢谢大家 index.xhtmlJsf 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">
<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();