Jsf 在Primefaces中,所有单选按钮都将自动选中
我遵循所给的例子。我必须显示员工列表的复选框和单选按钮,用户可以选择多个复选框,但只能选择一个单选按钮。这是正常的行为。我先从Radiobutton开始,运行之后,所有的Radiobutton都会自动选择 我有下面的index.xhtml页面Jsf 在Primefaces中,所有单选按钮都将自动选中,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我遵循所给的例子。我必须显示员工列表的复选框和单选按钮,用户可以选择多个复选框,但只能选择一个单选按钮。这是正常的行为。我先从Radiobutton开始,运行之后,所有的Radiobutton都会自动选择 我有下面的index.xhtml页面 <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:event listener="#{userPreferenceBean.preRender}" type="preRenderView" />
<h:head>
<title>Datatable with Checkbox and RadioButton Example</title>
</h:head>
<h:body>
<h:form>
<p:dataTable id="employeeDataTable" var="employee" value="#{userPreferenceBean.employeeList}"
rowKey="#{userPreferenceBean.employeeDataModel}" paginator="true" rows="10"
selection="#{userPreferenceBean.selectedEmployeeList}">
<f:facet name="header">
Showing employee List
</f:facet>
<p:column selectionMode="single" style="width:2%"></p:column>
<p:column headerText="Name" style="width:48%">
#{employee.name}
</p:column>
<p:column headerText="Department" style="width:48%">
#{employee.department}
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
这是我的数据模型类:
public class EmployeeDataModel extends ListDataModel<Employee> implements SelectableDataModel<Employee>{
public EmployeeDataModel(){
}
public EmployeeDataModel(List<Employee> employees){
super(employees);
}
@Override
public Employee getRowData(String rowKey) {
@SuppressWarnings("unchecked")
List<Employee> employees = (List<Employee>) getWrappedData();
for(Employee employee : employees){
if(employee.getName().equals(rowKey))
return employee;
}
return null;
}
@Override
public Object getRowKey(Employee employee) {
return employee.getName();
}
}
公共类EmployeeDataModel扩展ListDataModel实现SelectableDataModel{
公共雇员数据模型(){
}
公共雇员数据模型(列出雇员){
超级(雇员);;
}
@凌驾
公共员工getRowData(字符串rowKey){
@抑制警告(“未选中”)
List employees=(List)getWrappedData();
用于(员工:员工){
if(employee.getName().equals(rowKey))
返回员工;
}
返回null;
}
@凌驾
公共对象getRowKey(员工){
返回employee.getName();
}
}
你知道为什么所有单选按钮都会被自动选中吗?我需要做哪些更改?谢谢附件是屏幕截图我认为不可能有一个单选按钮列表,其中只能选择1个,然后选择1个复选框来选择所有单选按钮。单选按钮的正常行为是只能选择1个。如果您只使用复选框,这是可能的,但即使如此,也只会选择显示页面。您可以在showcase中对此进行测试
如果我是你,我将只使用复选框来实现解决方案 如果未正确使用
employeeDataModel
,则表的值
属性应按以下方式为init
value=“#{userPreferenceBean.employeeDataModel}”
我认为您可以删除rowKey
属性
看看下面的例子我终于能够解决这个问题了。问题如下: 因为我的选择模式是单一的
<p:column selectionMode="single" style="width:2%"></p:column>
我在我的支持bean中添加了下面的成员
private Employee selectedEmployee; with getters and setters. Now it is working fine.
完整代码为@
谢谢。我试着告诉我下面的错误消息java.lang.NumberFormatException:对于输入字符串:java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)java.lang.Integer.parseInt(Integer.java:492)java.lang.Integer.parseInt(Integer.java:527)在com.sun.faces.el.DemuxCompositeELResolver.的javax.el.ListELResolver.toInteger(ListELResolver.java:409)和javax.el.ListELResolver.getValue(ListELResolver.java:202)上atI更新了我的答案,因为我认为您需要一种不同的方法。我的要求是不要有一个复选框来选择所有单选按钮。相反,我的要求是,通过选中多个复选框,让用户选择多个员工作为他/她的最爱,但只选择一个单选按钮,使一名员工成为他/她的主要员工。希望现在一切都清楚了。如果这两种情况都发生在1个datatable中呢?那么你应该有一个带有单选按钮的列和一个带有复选框的列,这是行不通的。使用复选框让用户选择他最喜欢的员工。要选择其主要员工,您可以添加一行,该行带有逗号按钮,您需要单击以选择和取消选择该员工。或者给他一个selectOne菜单来选择主要员工。这就是employeeDataModel在支持bean中的定义方式<代码>私人EmployeeDataModel EmployeeDataModel因此,如果我生成
value=“#{userPreferenceBean.employeeDataModel}”
这将给我ClassCastExceptionjava.util.ArrayList不能转换为com.sudipta.metadata.Employee
,如果您看到我的支持bean,下面是这样的私有EmployeeDataModel EmployeeDataModel@PostConstruct public void initializeEmployeeList(){createEmployeeList();employeeDataModel=new employeeDataModel(employeeList);}
是否从表中删除了行键?是。还是同样的问题异常应该指向代码中的特定行,它是哪一行,以及在那里写了什么代码?它是否指向您的@PostConstruct
。。。。新的EmployeeDataModel(employeeList);线路?
<p:column selectionMode="single" style="width:2%"></p:column>
<p:dataTable id="employeeDataTable" var="employee" value="#{userPreferenceBean.employeeDataModel}"
paginator="true" rows="10" selection="#{userPreferenceBean.selectedEmployee}">
<f:facet name="header">
Showing employee List
</f:facet>
<p:column selectionMode="single" style="width:2%" />
<p:column headerText="Name" style="width:48%">
#{employee.name}
</p:column>
<p:column headerText="Department" style="width:48%">
#{employee.department}
</p:column>
</p:dataTable>
private Employee selectedEmployee; with getters and setters. Now it is working fine.