命令按钮在我使用选择列表时失去操作



我遇到了一个奇怪的问题。我正在使用选择列表组件,但似乎当我使用选择列表时,我的命令按钮停止工作: 这是代码:

.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 中重新创建。

相关内容

  • 没有找到相关文章