please help me to solve this annoying problem
i have a data table that displays a list of students and their marks
each class has a set of students and each student has a dynamic set of mark fields
this works fine for displaying but when i save the marks i get the following error
WARNING: /ui/details.xhtml @153,211 value="#{fff[colIndex].value}": Target Unreachable, 'null' returned null
javax.el.PropertyNotFoundException: /ui/details.xhtml @153,211 value="#{fff[colIndex].value}": Target Unreachable, 'null' returned null
please any ideas to solve this?????
i use the follwing code
Code: Select all
<p:dataTable dynamic="true" style="width: 90%;font-size:10" var="st" rowIndexVar="rowIndex" value="#{teacherClasses.selectedClass.students}" id="dddddddd">
<f:facet name="header">
<p:toolbar>
<p:toolbarGroup align="center">
#{teacherClasses.selectedClass.crsName} Sec: #{teacherClasses.selectedClass.classNo} Instructor: #{teacherClasses.selectedClass.tchrName} Semester: #{teacherClasses.selectedClass.classYyt}
</p:toolbarGroup>
</p:toolbar>
</f:facet>
<p:column headerText=" " style="width:10px">
<h:outputText style="font-size:10" value="#{rowIndex+1}" />
</p:column>
<p:column sortBy="#{st.studId}" headerText="Student ID" style="width:100px">
<h:outputText style="font-size:10" value="#{st.studId}" />
</p:column>
<p:column sortBy="#{st.lName}" headerText="Student Name" style="width:250px">
<h:outputText style="font-size:10" value="#{st.lName}" />
</p:column>
<p:column style=" text-align: center " headerText="Mark Fields">
<f:facet name="header">
<p:dataTable style="font-size: xx-small;border:none" value="${teacherClasses.selectedClass.fieldNamesx}" var="f">
<p:columns value="${teacherClasses.selectedClass.classFields}" var="column" columnIndexVar="colIndex">
<h:outputText style="width:30px;font-size:10" value="${column.fieldName}"></h:outputText>
<br></br>
<h:outputText style="width:30px;font-size:10" value="[${column.percentage}]"></h:outputText>
</p:columns>
</p:dataTable>
</f:facet>
<p:dataTable style="border:none" id="mfTable" value="#{st.markFields}" var="fff" >
<p:columns value="#{teacherClasses.selectedClass.fieldNames}" var="column" columnIndexVar="colIndex">
<p:inputText onfocus="this.select()" onclick="setCurrent(this)" onmouseover="this.select()" value="#{fff[colIndex].value}" style="width: 40px; height: 20px; text-align: center">
<f:validateDoubleRange minimum="0" maximum="100"></f:validateDoubleRange>
</p:inputText>
</p:columns>
</p:dataTable>
</p:column>
</p:dataTable>
Code: Select all
package beans;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;
import model.UrsClass;
/**
*
* @author Administrator
*/
@ManagedBean
@SessionScoped
public class TeacherClasses implements java.io.Serializable {
private List<model.UrsClass> classes;
private model.UrsClass selectedClass;
private List<SelectItem> classItems;
private List<String> oneRow;
public List<String> getOneRow() {
return oneRow;
}
public void setOneRow(List<String> oneRow) {
this.oneRow = oneRow;
}
/** Creates a new instance of TeacherClasses */
public TeacherClasses() {
try {
classes = new ArrayList<model.UrsClass>();
selectedClass = new model.UrsClass();
oneRow = new java.util.ArrayList<String>();
oneRow.add("1");
classes.add(new model.UrsClass(db.get().getString("class_yyt"), db.get().getString("crs_no"), db.get().getString("crs_seq"), db.get().getString("class_no"), db.get().getString("class_type"), db.get().getString("tchr_no"), db.get().getString("tchr_l_name"), db.get().getString("crs_l_name")));
} catch (Exception ex) {
Logger.getLogger(TeacherClasses.class.getName()).log(Level.SEVERE, null, ex);
}
}
public List<UrsClass> getClasses() {
return classes;
}
public void setClasses(List<UrsClass> classes) {
this.classes = classes;
}
public UrsClass getSelectedClass() {
return selectedClass;
}
public void setSelectedClass(UrsClass selectedClass) {
this.selectedClass = selectedClass;
}
public List<SelectItem> getClassItems() {
if (classItems == null) {
classItems = new ArrayList<SelectItem>();
for (model.UrsClass s : classes) {
classItems.add(new SelectItem(s, s.getCrsName() + " Sec " + s.getClassNo()));
}
}
return classItems;
}
public void setClassItems(List<SelectItem> classItems) {
this.classItems = classItems;
}
public String viewClass() {
return "success";
}
public String viewClassNotes() {
return "notes";
}
}
Code: Select all
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package model;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
/**
*
* @author Administrator
*/
public class Student {
private String studId, lName, aName, specNo, specName, colgNo, colgName;
private List<model.MarkField[]> markFields;
public List<MarkField[]> getMarkFields() {
System.out.println("Getting mark fields for " + this.studId);
return markFields;
}
public void setMarkFields(List<MarkField[]> markFields) {
this.markFields = markFields;
}
/* public List<model.MarkField> getMarkFields() {
System.out.println("Studentnt id="+studId);
for (model.MarkField f : markFields)
{
System.out.println(f.getFieldName());
}
return markFields;
}
public void setMarkFields(List<MarkField> fields) {
this.markFields = fields;
}*/
public Student(String studId, String lName, String aName, String specNo, String specName, String colgNo, String colgName, model.UrsClass c) {
System.out.print("Creating student " + studId);
this.studId = studId;
this.lName = lName;
this.aName = aName;
this.specNo = specNo;
this.specName = specName;
this.colgNo = colgNo;
this.colgName = colgName;
System.out.print("adding default fields for " + studId);
markFields = new java.util.ArrayList<model.MarkField[]>();
markFields.add(new model.MarkField(999, "test", 20, 1, 15));
markFields.add(new model.MarkField(888, "test1", 50, 0, 33));
mfArray[mfi]=new model.MarkField(db.get().getLong("field_no"), db.get().getString("field_name"), db.get().getDouble("percentage"), db.get().getInt("is_displayable"), db.get().getDouble("mark_value"));
mfi=mfi+1;
// markFields.add(new model.MarkField(db.get().getLong("field_no"), db.get().getString("field_name"), db.get().getDouble("percentage"), db.get().getInt("is_displayable"), db.get().getDouble("mark_value")));
// System.out.println(db.get().getString("field_name"));
}
markFields.add(mfArray);
System.out.println("Saved student fields::::::::::::::::::");
/*for (model.MarkField f : markFields) {
System.out.println(f.getFieldName());
}*/
} catch (Exception e) {
e.printStackTrace();
} finally {
if (db != null) {
db.close();
}
}
}
public Student() {
}
public String getaName() {
return aName;
}
public void setaName(String aName) {
this.aName = aName;
}
public String getColgName() {
return colgName;
}
public void setColgName(String colgName) {
this.colgName = colgName;
}
public String getColgNo() {
return colgNo;
}
public void setColgNo(String colgNo) {
this.colgNo = colgNo;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
public String getSpecName() {
return specName;
}
public void setSpecName(String specName) {
this.specName = specName;
}
public String getSpecNo() {
return specNo;
}
public void setSpecNo(String specNo) {
this.specNo = specNo;
}
public String getStudId() {
return studId;
}
public void setStudId(String studId) {
this.studId = studId;
}
public void saveMarks()
{
System.out.println("In save marks********************************************************");
System.out.println("Student fields values for "+getlName());
/*for(model.MarkField f:getMarkFields())
{
System.out.println(f.getFieldName()+"="+f.getValue());
}*/
FacesMessage msg = new FacesMessage("Saved Succesfully... ");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
Code: Select all
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package model;
/**
*
* @author Administrator
*/
public class MarkField {
private long fieldNo;
private String fieldName;
private double percentage;
private int displayable;
private double value;
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
public MarkField(long fieldNo, String fieldName, double percentage, int displayable,double value) {
this.fieldNo = fieldNo;
this.fieldName = fieldName;
this.percentage = percentage;
this.displayable = displayable;
this.value=value;
}
public MarkField() {
}
public int getDisplayable() {
return displayable;
}
public void setDisplayable(int displayable) {
this.displayable = displayable;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public long getFieldNo() {
return fieldNo;
}
public void setFieldNo(long fieldNo) {
this.fieldNo = fieldNo;
}
public double getPercentage() {
return percentage;
}
public void setPercentage(double percentage) {
this.percentage = percentage;
}
}