Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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_Jsf 2_Primefaces - Fatal编程技术网

Jsf 在Primefaces中,所有单选按钮都将自动选中

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"

我遵循所给的例子。我必须显示员工列表的复选框和单选按钮,用户可以选择多个复选框,但只能选择一个单选按钮。这是正常的行为。我先从Radiobutton开始,运行之后,所有的Radiobutton都会自动选择

我有下面的index.xhtml页面

<!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}”
这将给我ClassCastException
java.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.