I  am trying to find an example of how to populate a select list of objects,
show the correct item as selected, and if the selection is saved, properly
update the object containing the item. In the example below, I would want to
show a group of fields for Student information with a select list of
Campuses. If the Student is already stored with a specific Campus, that
should be selected. If the selection choice is changed, saving the Student
should update what Campus object is contained by the Student.

 

I have a custom TypeConverter  to convert between the Campus id string and
Campus objects and I can see the conversion code executes fine.
Unfortunately, saving a selection results in an "invalid field value for
field 'campus'" error and when I first call up the page, the selected Campus
is not the correct one.

 

 

public class Student {

 

      private Campus campus;

      

      public Campus getCampus() {return campus; }

      public void setCampus(Campus campus) {this.campus = campus; }

}

 

public class Campus {

 

      private Long id;

private String name;

      

      public Long getId() {return name; }

      public void setId(Long id) {this.id = id; )

      public String getName() {return name; }

      public void setName(String name) {this.name = name; }

}

 

public class StudentAction extends ActionSupport implements ModelDriven,
Preparable {

 

protected Object model;

private Student student;

      private Campus campus;

private List<Campus> campusList; 

      private DB db;

      private long id;

 

      public void prepare() throws Exception {   

            campusList = db.findAllCampuses();

            if (getId() == 0) {

student = db.createNewStudent();         

            } else { 

student = db.findByStudentId(getId()); 

            } 

      }

 

      public String save() {

      try {

                  db.save(getModel());

            } catch (Exception e) {

                  return ERROR;

            }

      return SUCCESS;

    }

      public Student getModel() {return student; }

public long getId() {return id; }

public void getId() {return id; }

 

}

 

public class CampusConverter extends StrutsTypeConverter {

      

private DB db;

      

      public Object convertFromString(Map context, String[] values, Class
toClass) {

      Campus campus = null;

        if (values != null && values.length > 0 && values[0] != null &&
values[0].length() > 0) {

            campus = db.findCampusById(new Long(values[0]));

        }

        return campus;

      }

      public String convertToString(Map context, Object o) {

        if (o instanceof Campus) {

            return ((Campus)o).getId().toString();

        }

        return "";

      }

}

 

<body>

      <s:form action="student_save" method="post">

            <s:select name="campus" list="campusList" listValue="name"
listKey="id" label="%{getText('label.campus')}" />

            <s:hidden name="id" value="%{id}" />

            <s:submit value="%{getText('button.label.submit')}"/>

      </s:form>

</body>

 

Suggestions, corrections, pointers, or links to examples/tutorials of how to
do this properly would be greatly appreciated.

 

 

Regards,

Lance Hill

Reply via email to