我遇到了一个奇怪的问题。我正在使用选择列表组件,但似乎当我使用选择列表时,我的命令按钮停止工作: 这是代码:
.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>PickList Test</title>
</h:head>
<h:body>
<h:form id="form">
<p:pickList value="#{pickListBean.employeeList}" var="employee" itemLabel="#{employee.employeeName}" itemValue="#{employee.employeeCode}" />
<p:commandButton value="Save" action="#{pickListBean.message}" style="margin-left: 12px;"/>
</h:form>
</h:body>
</html>
豆
@ManagedBean
@RequestScoped
public class PickListBean {
@EJB
private BussinessList bl = new BussinessList();
private DualListModel<Employee> employeeList;
private Employee employee;
/**
* Creates a new instance of PickListBean
*/
public PickListBean() {
List<Employee> source = new ArrayList<Employee>();
List<Employee> target = new ArrayList<Employee>();
source = bl.getEmployee();
employeeList = new DualListModel<Employee>(source, target);
}
public void message(){
System.out.println("CommandButton is working");
}
public DualListModel<Employee> getEmployeeList() {
return employeeList;
}
public void setEmployeeList(DualListModel<Employee> employeeList) {
this.employeeList = employeeList;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee= employee;
}
}
当我单击命令按钮时,不会调用消息方法,但是当我从 xhtml 中删除选项列表时,命令按钮会调用消息方法。
我正在使用 jsf 2.2,质数 4.0...
这段代码有很多错误
在开始错误之前,我可以在名为getEmployeePickList的方法中看到2个严重糟糕的命名选择
- 它首先不是一个选择列表。 它是一个数据列表
- 与EmployeeList的区别在于它保留了Employee而不是Functionario的实例。您选择的名称给人的印象是其中一个是 PickList,而另一个是 ArrayList,并且它们保留了同一类的实例
现在,您的 xhtml 可能会在声明中缺少某些内容。我尝试了您的代码,即使我删除了pickList,您的命令按钮也不会触发。尝试从这个开始(删除 xml 声明)
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 TransitionalEN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
此外,员工类不是字符串,因此如果没有转换器,您的 pickList 将无法工作。例如,请参阅此内容
最后,你的 PickList 将在你的类中搜索一个 setEmployeePickList() 方法。我尝试使用您的 pickList 与字符串而不是员工一起工作,以解决转换器问题,自然地,我遇到了此错误:
javax.el.PropertyNotFoundException: test.xhtml @21,140 value="#{pickListBean.employeePickList}": Property 'employeePickList' not writable on type org.primefaces.model.DualListModel
对此的解决方案是,将 pickList 与 #{pickListBean.employeeList} 而不是 #{pickListBean.employeePickList} 一起输入。您可以在其他位置填充您的员工列表,例如在 PickListBean 构造函数中,而不是在 getEmployeePickList 中重新创建。