Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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
Java af:Panel手风琴部分af上的装配工:选择一个选择值更改侦听器_Java_Oracle_Jdeveloper_Oracle Adf - Fatal编程技术网

Java af:Panel手风琴部分af上的装配工:选择一个选择值更改侦听器

Java af:Panel手风琴部分af上的装配工:选择一个选择值更改侦听器,java,oracle,jdeveloper,oracle-adf,Java,Oracle,Jdeveloper,Oracle Adf,我是ADF faces方面的新手,在af:selectOneChoice的值发生变化时,我在部分装配af:Panel手风琴时遇到了麻烦。af:panelAccordion在其af:showDetailItem中包含多个af:showDetailHeader。所有af:showDetailItem及其af:showDetailHeader都是动态生成的。 bean college在视图范围内,其代码如下所示: public class College { private List<D

我是ADF faces方面的新手,在af:selectOneChoice的值发生变化时,我在部分装配af:Panel手风琴时遇到了麻烦。af:panelAccordion在其af:showDetailItem中包含多个af:showDetailHeader。所有af:showDetailItem及其af:showDetailHeader都是动态生成的。 bean college在视图范围内,其代码如下所示:

public class College {
    private List<Department> departments;
    private List<SelectItem> departmentDropDownMenu;
    private String selectedDepartment;

    public College() {
        this.departments = new ArrayList<Department>(0);

        Employee employee1 = new Employee("Employee 1", "Information");
        Employee employee2 = new Employee("Employee 2", "Information");
        Employee employee3 = new Employee("Employee 3", "Information");
        Employee employee4 = new Employee("Employee 4", "Information");
        Employee employee5 = new Employee("Employee 5", "Information");

        List<Employee> employees1 = new ArrayList<Employee>(0);
        employees1.add(employee1);

        List<Employee> employees2 = new ArrayList<Employee>(0);
        employees2.add(employee2);

        List<Employee> employees3 = new ArrayList<Employee>(0);
        employees3.add(employee3);

        List<Employee> employees4 = new ArrayList<Employee>(0);
        employees4.add(employee4);
        employees4.add(employee5);

        Department department1 = new Department("Department 1", employees1);
        Department department2 = new Department("Department 2", employees2);
        Department department3 = new Department("Department 3", employees3);
        Department department4 = new Department("Department 4", employees4);

        this.departments.add(department1);
        this.departments.add(department2);
        this.departments.add(department3);
        this.departments.add(department4);

        List<SelectItem> departmentDropDownMenu = new ArrayList<SelectItem>(0);
        departmentDropDownMenu.add(new SelectItem("Department 1"));
        departmentDropDownMenu.add(new SelectItem("Department 2"));
        departmentDropDownMenu.add(new SelectItem("Department 3"));
        departmentDropDownMenu.add(new SelectItem("Department 4"));

        this.setDepartmentDropDownMenu(departmentDropDownMenu);
        this.setSelectedDepartment("Department 1");
    }

    public void departmentDropDrownValueChangeListener(ValueChangeEvent event) {
        String oldValue = event.getOldValue().toString();
        String newValue = event.getNewValue().toString();

        if(oldValue.equalsIgnoreCase(newValue)) {
            return;
        }
        List<Department> departmentUpdated = new ArrayList<Department>(0);

        for (Department department : departments) {
            if(department.getDepartmentName().equals(newValue)) {
                departmentUpdated.add(department);
                break;
            }
        }

        for (Department department : departments) {
            if(!department.getDepartmentName().equals(newValue)) {
                departmentUpdated.add(department);                
            }
        }

        this.setDepartments(departmentUpdated);
    }

    public void setDepartments(List<Department> departments) {
        this.departments = departments;
    }

    public List<Department> getDepartments() {
        return departments;
    }

    public void setDepartmentDropDownMenu(List<SelectItem> departmentDropDownMenu) {
        this.departmentDropDownMenu = departmentDropDownMenu;
    }

    public List<SelectItem> getDepartmentDropDownMenu() {
        return departmentDropDownMenu;
    }

    public void setSelectedDepartment(String selectedDepartment) {
        this.selectedDepartment = selectedDepartment;
    }

    public String getSelectedDepartment() {
        return selectedDepartment;
    }
}
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
        <af:document title="Page.jspx" id="d1">
            <af:form id="f1">
                <af:panelStretchLayout id="psl1">
                    <f:facet name="center">
                        <af:panelGroupLayout id="pgl2">
                            <af:selectOneChoice label="Department" value="#{college.selectedDepartment}" id="soc1"
                                                unselectedLabel="" autoSubmit="true" immediate="true"
                                                valueChangeListener="#{college.departmentDropDrownValueChangeListener}">
                                <f:selectItems value="#{college.departmentDropDownMenu}" id="si1"/>
                            </af:selectOneChoice>
                            <af:panelAccordion id="pa1" discloseNone="true" partialTriggers="soc1" discloseMany="true">
                                <af:forEach items="#{college.departments}" var="department">
                                    <af:showDetailItem text="#{department.departmentName}" id="sdi1">
                                        <af:forEach items="#{department.employees}" var="employee">
                                            <af:showDetailHeader text="#{employee.name}" disclosed="false" id="sdh1">
                                                <af:outputText value="#{employee.info}" id="ot1"/>
                                            </af:showDetailHeader>
                                        </af:forEach>
                                    </af:showDetailItem>
                                </af:forEach>
                            </af:panelAccordion>
                        </af:panelGroupLayout>
                    </f:facet>
                </af:panelStretchLayout>
            </af:form>
        </af:document>
    </f:view>
</jsp:root>
公立学院{
私人名单部门;
私人列表部门下拉菜单;
私有字符串选择部门;
公立学院(){
this.departments=newarraylist(0);
员工1=新员工(“员工1”,“信息”);
雇员雇员2=新雇员(“雇员2”,“信息”);
员工employee3=新员工(“员工3”,“信息”);
雇员雇员4=新雇员(“雇员4”,“信息”);
雇员雇员5=新雇员(“雇员5”,“信息”);
List employees1=新建ArrayList(0);
员工1.添加(员工1);
List employees2=新建ArrayList(0);
员工2.添加(员工2);
List employees3=新的ArrayList(0);
员工3.添加(员工3);
List employees4=新建ArrayList(0);
员工4.添加(员工4);
员工4.添加(员工5);
部门1=新部门(“部门1”,员工1);
部门2=新部门(“部门2”,员工2);
部门3=新部门(“部门3”,员工3);
部门4=新部门(“部门4”,员工4);
本.部门.增补(部门1);
本.部门.增补(部门2);
本.部门.增补(部门3);
本.部门.增补(部门4);
列表部门下拉菜单=新建ArrayList(0);
部门下拉菜单。添加(新选择项(“部门1”);
部门下拉菜单。添加(新选择项(“部门2”);
部门下拉菜单。添加(新选择项(“部门3”);
部门下拉菜单。添加(新选择项(“部门4”);
此.setDepartmentDropDownMenu(departmentDropDownMenu);
本公司选定的部门(“部门1”);
}
public void departmentDropDivergValueChangeListener(ValueChangeEvent事件){
字符串oldValue=event.getOldValue().toString();
字符串newValue=event.getNewValue().toString();
if(oldValue.equalsIgnoreCase(newValue)){
返回;
}
列表部门更新=新的ArrayList(0);
适用于(部门:部门){
if(department.getDepartmentName().equals(newValue)){
部门更新。添加(部门);
打破
}
}
适用于(部门:部门){
如果(!department.getDepartmentName().equals(newValue)){
部门更新。添加(部门);
}
}
本文件。设置部门(部门更新);
}
公共部门(列出部门){
这个.部门=部门;
}
公共部门名单({
返回部门;
}
公共作废设置部门下拉菜单(列出部门下拉菜单){
this.departmentDropDownMenu=departmentDropDownMenu;
}
公共列表getDepartmentDropDownMenu(){
返回部门下拉菜单;
}
public void setSelectedDepartment(字符串selectedDepartment){
this.selectedDepartment=selectedDepartment;
}
公共字符串getSelectedDepartment(){
返回所选部门;
}
}
Department和Employee类是简单的POJO。Department类仅包含两个字段: 1.字符串departmentName和 2.列出雇员名单 Employee类还包含两个字段及其访问器: 1.字符串名和 2.字符串信息

页面的jspx代码如下所示:

public class College {
    private List<Department> departments;
    private List<SelectItem> departmentDropDownMenu;
    private String selectedDepartment;

    public College() {
        this.departments = new ArrayList<Department>(0);

        Employee employee1 = new Employee("Employee 1", "Information");
        Employee employee2 = new Employee("Employee 2", "Information");
        Employee employee3 = new Employee("Employee 3", "Information");
        Employee employee4 = new Employee("Employee 4", "Information");
        Employee employee5 = new Employee("Employee 5", "Information");

        List<Employee> employees1 = new ArrayList<Employee>(0);
        employees1.add(employee1);

        List<Employee> employees2 = new ArrayList<Employee>(0);
        employees2.add(employee2);

        List<Employee> employees3 = new ArrayList<Employee>(0);
        employees3.add(employee3);

        List<Employee> employees4 = new ArrayList<Employee>(0);
        employees4.add(employee4);
        employees4.add(employee5);

        Department department1 = new Department("Department 1", employees1);
        Department department2 = new Department("Department 2", employees2);
        Department department3 = new Department("Department 3", employees3);
        Department department4 = new Department("Department 4", employees4);

        this.departments.add(department1);
        this.departments.add(department2);
        this.departments.add(department3);
        this.departments.add(department4);

        List<SelectItem> departmentDropDownMenu = new ArrayList<SelectItem>(0);
        departmentDropDownMenu.add(new SelectItem("Department 1"));
        departmentDropDownMenu.add(new SelectItem("Department 2"));
        departmentDropDownMenu.add(new SelectItem("Department 3"));
        departmentDropDownMenu.add(new SelectItem("Department 4"));

        this.setDepartmentDropDownMenu(departmentDropDownMenu);
        this.setSelectedDepartment("Department 1");
    }

    public void departmentDropDrownValueChangeListener(ValueChangeEvent event) {
        String oldValue = event.getOldValue().toString();
        String newValue = event.getNewValue().toString();

        if(oldValue.equalsIgnoreCase(newValue)) {
            return;
        }
        List<Department> departmentUpdated = new ArrayList<Department>(0);

        for (Department department : departments) {
            if(department.getDepartmentName().equals(newValue)) {
                departmentUpdated.add(department);
                break;
            }
        }

        for (Department department : departments) {
            if(!department.getDepartmentName().equals(newValue)) {
                departmentUpdated.add(department);                
            }
        }

        this.setDepartments(departmentUpdated);
    }

    public void setDepartments(List<Department> departments) {
        this.departments = departments;
    }

    public List<Department> getDepartments() {
        return departments;
    }

    public void setDepartmentDropDownMenu(List<SelectItem> departmentDropDownMenu) {
        this.departmentDropDownMenu = departmentDropDownMenu;
    }

    public List<SelectItem> getDepartmentDropDownMenu() {
        return departmentDropDownMenu;
    }

    public void setSelectedDepartment(String selectedDepartment) {
        this.selectedDepartment = selectedDepartment;
    }

    public String getSelectedDepartment() {
        return selectedDepartment;
    }
}
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
        <af:document title="Page.jspx" id="d1">
            <af:form id="f1">
                <af:panelStretchLayout id="psl1">
                    <f:facet name="center">
                        <af:panelGroupLayout id="pgl2">
                            <af:selectOneChoice label="Department" value="#{college.selectedDepartment}" id="soc1"
                                                unselectedLabel="" autoSubmit="true" immediate="true"
                                                valueChangeListener="#{college.departmentDropDrownValueChangeListener}">
                                <f:selectItems value="#{college.departmentDropDownMenu}" id="si1"/>
                            </af:selectOneChoice>
                            <af:panelAccordion id="pa1" discloseNone="true" partialTriggers="soc1" discloseMany="true">
                                <af:forEach items="#{college.departments}" var="department">
                                    <af:showDetailItem text="#{department.departmentName}" id="sdi1">
                                        <af:forEach items="#{department.employees}" var="employee">
                                            <af:showDetailHeader text="#{employee.name}" disclosed="false" id="sdh1">
                                                <af:outputText value="#{employee.info}" id="ot1"/>
                                            </af:showDetailHeader>
                                        </af:forEach>
                                    </af:showDetailItem>
                                </af:forEach>
                            </af:panelAccordion>
                        </af:panelGroupLayout>
                    </f:facet>
                </af:panelStretchLayout>
            </af:form>
        </af:document>
    </f:view>
</jsp:root>

我想做的是根据af:selectOneChoice的选定值重新排列af:showtailItem

我正在图像中显示问题:

正如您所看到的,第一个图像是页面加载后的正常状态。部门1只有一名员工,即员工1,部门4有两名员工,员工1,员工2。从下拉列表中选择Department 4后,Department 3进入最后一个位置,但Department 3面板中显然有两个af:showDetailItem,但最初只有一名员工。另外,额外的af:showDetailItem不可单击

如果有人能给我一些建议,那将对我很有帮助


谢谢。

问题在于使用

组件树完成后,不应添加、删除或重新排序
标记项中的对象 被创造

您可以改用
标记。JDev会抱怨它不是
的有效子级,但它确实有效

这个页面布局似乎有效。注意,我将
移动到顶面,并卸下
,以迫使手风琴伸展,并使所有的孩子都可见

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
        <af:document title="Page.jspx" id="d1">
            <af:form id="f1">
                <af:panelStretchLayout id="psl1">
                    <f:facet name="center">
                            <af:panelAccordion id="pa1" discloseNone="false" partialTriggers="soc1" discloseMany="true" reorder="enable">
                                <af:iterator value="#{college.departments}" var="department">
                                    <af:showDetailItem text="#{department.departmentName}" id="sdi1">
                                        <af:iterator value="#{department.employees}" var="employee">
                                            <af:showDetailHeader text="#{employee.name}" disclosed="false" id="sdh1">
                                                <af:outputText value="#{employee.info}" id="ot1"/>
                                            </af:showDetailHeader>
                                        </af:iterator>
                                    </af:showDetailItem>
                                </af:iterator>
                            </af:panelAccordion>    
                    </f:facet>
                    <f:facet name="top">
                        <af:selectOneChoice label="Department" value="#{college.selectedDepartment}" id="soc1" unselectedLabel="" autoSubmit="true"
                                            valueChangeListener="#{college.departmentDropDrownValueChangeListener}" immediate="true">
                            <f:selectItems value="#{college.departmentDropDownMenu}" id="si1"/>
                        </af:selectOneChoice>
                    </f:facet>
                </af:panelStretchLayout>
            </af:form>
        </af:document>
    </f:view>
</jsp:root>