Java 使用Jsf在PanelGrid中创建动态文本框

Java 使用Jsf在PanelGrid中创建动态文本框,java,jsf,Java,Jsf,我在jsf中的HtmlPangerId中创建动态inputText时遇到问题 我所做的事情如下: 1) 我有一个下拉列表,用户在其中选择主题的数量。 2) 根据下拉列表中选择的值,我必须在PanelGrid内创建inputText。 3) 因此,在ajax更改下拉事件中,我创建了HtmlInputText并将其添加到htmlPanelGrid中,然后更新htmlPanelGrid 4) 这个HtmlPanelGrid绑定到名为Subject的支持bean 我面临的问题: 当我选择任何一个值(例如

我在jsf中的HtmlPangerId中创建动态inputText时遇到问题

我所做的事情如下: 1) 我有一个下拉列表,用户在其中选择主题的数量。 2) 根据下拉列表中选择的值,我必须在PanelGrid内创建inputText。 3) 因此,在ajax更改下拉事件中,我创建了HtmlInputText并将其添加到htmlPanelGrid中,然后更新htmlPanelGrid 4) 这个HtmlPanelGrid绑定到名为Subject的支持bean

我面临的问题: 当我选择任何一个值(例如:3)时,最初在htmlPanelGrid中不会显示文本框。 当我选择另一个值(例如:2)时,上一个值是3(因此显示3个文本框) 当我选择另一个值(例如:4)时,上一个值是2(因此将显示两个文本框)

我需要的解决方案: 选择2时,应显示2文本框 3表示应显示3个文本框,以此类推

我的Xhtml代码:(这是Xhtml代码的一部分。尚未粘贴完整的Xhtml代码)

度
部门
来自
学术会议
学期
受试者人数
**
**
**
**
支持Bean: 请参见标记为粗体或粗体的代码**

package com.oxford.web.college;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import com.oxford.biz.college.SesnCollegeRemote;
import com.oxford.biz.collegesubjects.SesnSubjectRemote;
import com.oxford.eea.ejb.exception.SystemException;
import com.oxford.entity.campus.EntCampus;
import com.oxford.entity.college.EntDegree;
import com.oxford.entity.college.EntDepartment;
import com.oxford.entity.collegesubjects.EntSubject;
import com.oxford.web.util.DisplayMessage;

@ManagedBean
@SessionScoped
public class Subject implements Serializable {

    private static final long serialVersionUID = 1L;

    Logger logger = Logger.getLogger(Subject.class.getName());

    @ManagedProperty("#{error}")
    private ResourceBundle error;

    @ManagedProperty("#{message}")
    private ResourceBundle message;

    @ManagedProperty(value = "#{collegeDepartment}")
    private CollegeDepartment collegeDepartment;

    private EntCampus entCampus;

    private EntDegree entDegree;

    private EntDepartment entDepartment;

    private EntSubject entSubject;

    private static Map<String, Object> degreeMap;

    private static Map<String, Object> departmentMap;

    private static Map<Integer, Integer> noOfSubjMap;

    private Integer noOfSubj;

    @EJB
    private SesnSubjectRemote sesnSubjectRemote;

    @EJB
    private SesnCollegeRemote sesnCollegeRemote;

    private List<EntDepartment> listOfDepartment;

    private List<EntDegree> listOfDegree;

    private HtmlPanelGrid subjPanelGrid;

    private Collection gridCollection;

    String errorMsg = null;

    String successMsg = null;

    static {
        degreeMap = new LinkedHashMap<String, Object>();
    }

    public Subject() {
        entDegree = new EntDegree();
        entDepartment = new EntDepartment();
        entSubject = new EntSubject();
        noOfSubjMap = new LinkedHashMap<Integer, Integer>();
        for(Integer i=1;i<12;i++){
            noOfSubjMap.put(i, i);
        }
    }

    @PostConstruct
    public void init() {
        loadDegree();
    }

    public static ValueExpression createValueExpression(String valueExpression,
            Class<?> valueType) {
        FacesContext context = FacesContext.getCurrentInstance();
        return context
                .getApplication()
                .getExpressionFactory()
                .createValueExpression(context.getELContext(), valueExpression,
                        valueType);
    }

    public void loadDegree() {
        try {
            listOfDegree = sesnCollegeRemote.getDegreeList(getEntCampus()
                    .getCampusId());
            for (EntDegree entDeg : listOfDegree) {
                degreeMap.put(entDeg.getDegreeName(), entDeg.getDegreeId());
            }
        } catch (SystemException sysex) {
            errorMsg = error.getString(sysex.getMessage());
            logger.log(Level.SEVERE, errorMsg);
            DisplayMessage.errorMessageUI(errorMsg);
        } catch (Exception ex) {
        }
    }

    public void seeSubjList(){
        List subjects = subjPanelGrid.getChildren();
        ArrayList<String> subjList = new ArrayList<String>();
        boolean flag = false;
        String val = null;
outer:      
            for(int i=0;i<subjects.size();i++){
            HtmlInputText htmlText =  (HtmlInputText)subjects.get(i);
            val = (String)htmlText.getValue();
            if(subjList!=null && subjList.size()>0){
                for(int j=0;j<subjList.size();j++){
                    String subject = subjList.get(j);
                    if(subject.equalsIgnoreCase(val)){
                        flag = true;
                        break outer;
                    }
                }
                if(flag==false){
                    subjList.add(val);
                }
            }else{
                subjList.add(val);
            }
        }
        System.out.println(subjList);
        if(flag){
            errorMsg = "The Subject '"+val+"' Should not repeat more than once";
            DisplayMessage.errorMessageUI(errorMsg);
        }
    }

    public void handleDegreeChange() {
        try {
            departmentMap = new LinkedHashMap<String, Object>();
            listOfDepartment = sesnSubjectRemote.getDepartmentList(
                    entDegree.getDegreeId(), getEntCampus().getCampusId());
            for (EntDepartment entDept : listOfDepartment) {
                departmentMap.put(entDept.getDeptName(), entDept.getDeptId());
            }
        } catch (SystemException sysex) {
            errorMsg = error.getString(sysex.getMessage());
            logger.log(Level.SEVERE, errorMsg);
            DisplayMessage.errorMessageUI(errorMsg);
        } catch (Exception ex) {
        }
    }

    **public void updateSubjGrid(){
        System.out.println("Inside UpdateSubjGrid method");
        Application app = FacesContext.getCurrentInstance().getApplication();
        gridCollection = new ArrayList();
        for(int i=0;i<getNoOfSubj();i++){
            HtmlInputText subjectText = (HtmlInputText) app.createComponent(HtmlInputText.COMPONENT_TYPE);
            subjPanelGrid = (HtmlPanelGrid) app.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
            subjPanelGrid.setId("subjGridId-"+i);
            subjectText.setId("subj-" + i);
            subjectText.setValueExpression(
                    "subjName",
                    createValueExpression("#{subject.entSubject.subjName}",
                            String.class));
            gridCollection.add(subjectText);
        }
        subjPanelGrid.getChildren().addAll(gridCollection);
        System.out.println("cc::"+subjPanelGrid.getChildCount());
    }**

    public Map<String, Object> getDegreeMap() {
        return degreeMap;
    }

    public Map<String, Object> getDepartmentMap() {
        return departmentMap;
    }

    public EntDepartment getEntDepartment() {
        return entDepartment;
    }

    public void setEntDepartment(EntDepartment entDepartment) {
        this.entDepartment = entDepartment;
    }

    public EntDegree getEntDegree() {
        return entDegree;
    }

    public void setEntDegree(EntDegree entDegree) {
        this.entDegree = entDegree;
    }

    public void setCollegeDepartment(CollegeDepartment collegeDepartment) {
        this.collegeDepartment = collegeDepartment;
    }

    public EntCampus getEntCampus() {
        if (collegeDepartment != null) {
            entCampus = collegeDepartment.getEntCampus();
        }
        return entCampus;
    }

    public ResourceBundle getError() {
        return error;
    }

    public void setError(ResourceBundle error) {
        this.error = error;
    }

    public ResourceBundle getMessage() {
        return message;
    }

    public void setMessage(ResourceBundle message) {
        this.message = message;
    }

    public EntSubject getEntSubject() {
        return entSubject;
    }

    public void setEntSubject(EntSubject entSubject) {
        this.entSubject = entSubject;
    }

    public HtmlPanelGrid getSubjPanelGrid() {
        return subjPanelGrid;
    }

    public void setSubjPanelGrid(HtmlPanelGrid subjPanelGrid) {
        this.subjPanelGrid = subjPanelGrid;
    }

    public Integer getNoOfSubj() {
        return noOfSubj;
    }

    public void setNoOfSubj(Integer noOfSubj) {
        this.noOfSubj = noOfSubj;
    }

    public Map<Integer, Integer> getNoOfSubjMap() {
        return noOfSubjMap;
    }

}
package com.oxford.web.college;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.LinkedHashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.ResourceBundle;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.annotation.PostConstruct;
导入javax.ejb.ejb;
导入javax.el.ValueExpression;
导入javax.faces.application.application;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.ManagedProperty;
导入javax.faces.bean.SessionScoped;
导入javax.faces.component.html.HtmlInputText;
导入javax.faces.component.html.HtmlPanelGrid;
导入javax.faces.context.FacesContext;
导入com.oxford.biz.college.SesnCollegeRemote;
导入com.oxford.biz.collegesubjects.sensubjectremote;
导入com.oxford.eea.ejb.exception.SystemException;
导入com.oxford.entity.campus.EntCampus;
导入com.oxford.entity.college.EntDegree;
导入com.oxford.entity.college.EntDepartment;
导入com.oxford.entity.CollegesSubjects.EntSubject;
导入com.oxford.web.util.DisplayMessage;
@ManagedBean
@会议范围
公共类Subject实现了可序列化{
私有静态最终长serialVersionUID=1L;
Logger=Logger.getLogger(Subject.class.getName());
@ManagedProperty(“错误”)
私有资源包错误;
@ManagedProperty(“消息”)
私有资源包消息;
@ManagedProperty(value=“#{collegeDepartment}”)
私立大学系;
私人校园;
私人学位;
私人部门;
私人主体;
私有静态映射degreeMap;
私有静态地图部门地图;
私有静态映射noOfSubjMap;
私有整数noOfSubj;
@EJB
私有sensubjectremote sensubjectremote;
@EJB
私人学院学院;
部门的私人名单;
私有度列表;
私有HtmlPanelGrid网格;
私人收藏;
字符串errorMsg=null;
字符串successsg=null;
静止的{
degreeMap=newlinkedhashmap();
}
公共主题(){
entDegree=新的entDegree();
entDepartment=新的entDepartment();
entSubject=新的entSubject();
noOfSubjMap=newlinkedhashmap();
对于(整数i=1;i
package com.oxford.web.college;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import com.oxford.biz.college.SesnCollegeRemote;
import com.oxford.biz.collegesubjects.SesnSubjectRemote;
import com.oxford.eea.ejb.exception.SystemException;
import com.oxford.entity.campus.EntCampus;
import com.oxford.entity.college.EntDegree;
import com.oxford.entity.college.EntDepartment;
import com.oxford.entity.collegesubjects.EntSubject;
import com.oxford.web.util.DisplayMessage;

@ManagedBean
@SessionScoped
public class Subject implements Serializable {

    private static final long serialVersionUID = 1L;

    Logger logger = Logger.getLogger(Subject.class.getName());

    @ManagedProperty("#{error}")
    private ResourceBundle error;

    @ManagedProperty("#{message}")
    private ResourceBundle message;

    @ManagedProperty(value = "#{collegeDepartment}")
    private CollegeDepartment collegeDepartment;

    private EntCampus entCampus;

    private EntDegree entDegree;

    private EntDepartment entDepartment;

    private EntSubject entSubject;

    private static Map<String, Object> degreeMap;

    private static Map<String, Object> departmentMap;

    private static Map<Integer, Integer> noOfSubjMap;

    private Integer noOfSubj;

    @EJB
    private SesnSubjectRemote sesnSubjectRemote;

    @EJB
    private SesnCollegeRemote sesnCollegeRemote;

    private List<EntDepartment> listOfDepartment;

    private List<EntDegree> listOfDegree;

    private HtmlPanelGrid subjPanelGrid;

    private Collection gridCollection;

    String errorMsg = null;

    String successMsg = null;

    static {
        degreeMap = new LinkedHashMap<String, Object>();
    }

    public Subject() {
        entDegree = new EntDegree();
        entDepartment = new EntDepartment();
        entSubject = new EntSubject();
        noOfSubjMap = new LinkedHashMap<Integer, Integer>();
        for(Integer i=1;i<12;i++){
            noOfSubjMap.put(i, i);
        }
    }

    @PostConstruct
    public void init() {
        loadDegree();
    }

    public static ValueExpression createValueExpression(String valueExpression,
            Class<?> valueType) {
        FacesContext context = FacesContext.getCurrentInstance();
        return context
                .getApplication()
                .getExpressionFactory()
                .createValueExpression(context.getELContext(), valueExpression,
                        valueType);
    }

    public void loadDegree() {
        try {
            listOfDegree = sesnCollegeRemote.getDegreeList(getEntCampus()
                    .getCampusId());
            for (EntDegree entDeg : listOfDegree) {
                degreeMap.put(entDeg.getDegreeName(), entDeg.getDegreeId());
            }
        } catch (SystemException sysex) {
            errorMsg = error.getString(sysex.getMessage());
            logger.log(Level.SEVERE, errorMsg);
            DisplayMessage.errorMessageUI(errorMsg);
        } catch (Exception ex) {
        }
    }

    public void seeSubjList(){
        List subjects = subjPanelGrid.getChildren();
        ArrayList<String> subjList = new ArrayList<String>();
        boolean flag = false;
        String val = null;
outer:      
            for(int i=0;i<subjects.size();i++){
            HtmlInputText htmlText =  (HtmlInputText)subjects.get(i);
            val = (String)htmlText.getValue();
            if(subjList!=null && subjList.size()>0){
                for(int j=0;j<subjList.size();j++){
                    String subject = subjList.get(j);
                    if(subject.equalsIgnoreCase(val)){
                        flag = true;
                        break outer;
                    }
                }
                if(flag==false){
                    subjList.add(val);
                }
            }else{
                subjList.add(val);
            }
        }
        System.out.println(subjList);
        if(flag){
            errorMsg = "The Subject '"+val+"' Should not repeat more than once";
            DisplayMessage.errorMessageUI(errorMsg);
        }
    }

    public void handleDegreeChange() {
        try {
            departmentMap = new LinkedHashMap<String, Object>();
            listOfDepartment = sesnSubjectRemote.getDepartmentList(
                    entDegree.getDegreeId(), getEntCampus().getCampusId());
            for (EntDepartment entDept : listOfDepartment) {
                departmentMap.put(entDept.getDeptName(), entDept.getDeptId());
            }
        } catch (SystemException sysex) {
            errorMsg = error.getString(sysex.getMessage());
            logger.log(Level.SEVERE, errorMsg);
            DisplayMessage.errorMessageUI(errorMsg);
        } catch (Exception ex) {
        }
    }

    **public void updateSubjGrid(){
        System.out.println("Inside UpdateSubjGrid method");
        Application app = FacesContext.getCurrentInstance().getApplication();
        gridCollection = new ArrayList();
        for(int i=0;i<getNoOfSubj();i++){
            HtmlInputText subjectText = (HtmlInputText) app.createComponent(HtmlInputText.COMPONENT_TYPE);
            subjPanelGrid = (HtmlPanelGrid) app.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
            subjPanelGrid.setId("subjGridId-"+i);
            subjectText.setId("subj-" + i);
            subjectText.setValueExpression(
                    "subjName",
                    createValueExpression("#{subject.entSubject.subjName}",
                            String.class));
            gridCollection.add(subjectText);
        }
        subjPanelGrid.getChildren().addAll(gridCollection);
        System.out.println("cc::"+subjPanelGrid.getChildCount());
    }**

    public Map<String, Object> getDegreeMap() {
        return degreeMap;
    }

    public Map<String, Object> getDepartmentMap() {
        return departmentMap;
    }

    public EntDepartment getEntDepartment() {
        return entDepartment;
    }

    public void setEntDepartment(EntDepartment entDepartment) {
        this.entDepartment = entDepartment;
    }

    public EntDegree getEntDegree() {
        return entDegree;
    }

    public void setEntDegree(EntDegree entDegree) {
        this.entDegree = entDegree;
    }

    public void setCollegeDepartment(CollegeDepartment collegeDepartment) {
        this.collegeDepartment = collegeDepartment;
    }

    public EntCampus getEntCampus() {
        if (collegeDepartment != null) {
            entCampus = collegeDepartment.getEntCampus();
        }
        return entCampus;
    }

    public ResourceBundle getError() {
        return error;
    }

    public void setError(ResourceBundle error) {
        this.error = error;
    }

    public ResourceBundle getMessage() {
        return message;
    }

    public void setMessage(ResourceBundle message) {
        this.message = message;
    }

    public EntSubject getEntSubject() {
        return entSubject;
    }

    public void setEntSubject(EntSubject entSubject) {
        this.entSubject = entSubject;
    }

    public HtmlPanelGrid getSubjPanelGrid() {
        return subjPanelGrid;
    }

    public void setSubjPanelGrid(HtmlPanelGrid subjPanelGrid) {
        this.subjPanelGrid = subjPanelGrid;
    }

    public Integer getNoOfSubj() {
        return noOfSubj;
    }

    public void setNoOfSubj(Integer noOfSubj) {
        this.noOfSubj = noOfSubj;
    }

    public Map<Integer, Integer> getNoOfSubjMap() {
        return noOfSubjMap;
    }

}