Java 使用Jsf在PanelGrid中创建动态文本框
我在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代码)Java 使用Jsf在PanelGrid中创建动态文本框,java,jsf,Java,Jsf,我在jsf中的HtmlPangerId中创建动态inputText时遇到问题 我所做的事情如下: 1) 我有一个下拉列表,用户在其中选择主题的数量。 2) 根据下拉列表中选择的值,我必须在PanelGrid内创建inputText。 3) 因此,在ajax更改下拉事件中,我创建了HtmlInputText并将其添加到htmlPanelGrid中,然后更新htmlPanelGrid 4) 这个HtmlPanelGrid绑定到名为Subject的支持bean 我面临的问题: 当我选择任何一个值(例如
度
部门
来自
学术会议
学期
受试者人数
**
**
**
**
支持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;
}
}