有个问题请问一下各位!我写一个系统,用Struts2+hibernate框架,用JSP写了一个录入数据的界面,通过表单提交给Action类进行对象的保存。
我要保存的是Student对象,其中包含所属班级的属性,在Student类中引用了Class类//Student的POJO类
public class Student {
private int id;
private String name;
private Class ofclass;
       //其他属性和getter,setter省略
}
//Class的POJO类
public class Classt {
private int id;
private String name;
       //其他属性和getter,setter省略
}
Student.hbn.xml中关于ofclass列的配置:<many-to-one class="edu.gdut.studentmis.vo.Class" fetch="join" name="ofclass">
   <column name="OFCLASS"/>
  </many-to-one>
JSP中的表单: <form action="stu_add" method="post">
      <!-- 其他表格省略 -->
      <tr>
  <td>所属班级</td>
  <td>
<select name="obj.ofclass">
                     <!-- 这里的c是Class对象,这里没有问题,c.name能正常显示 -->
     <c:forEach var="c" items="${items}">
  <option value="c">${c.name}</option>
    </c:forEach>
 </select>
    </td>
</tr>
 </from>我想知道option中的value值可以设置为一个对象吗?我把value值设置为对象之后进行保存,报错说数据库中的ofclass列不能为空的,也就是有两种可能:一种是value值不能设置为对象;另一种可能就是在将Student进行保存的时候因为Hibernate的配置问题不能将Class对象转为class的id存入Student的班级列。请问应该怎么解决呢?
初学,没有经验,请前辈们多多指教!

解决方案 »

  1.   

    问一下楼主
    private Class ofclass;
    对,就这句话,你这是建立了班级的对象是吧,ssh是对对像进行操作,设置了一对多关系后是可以进行对象数据插入的。
    在前台jsp中,你用c标签遍历后,你可以在浏览器中查看一下,下拉框中的value值是否存在。
      

  2.   


    好的,查看了一下,发现应该是value不能设置为对象了,自动将option中的文本设置为了value值。那这样我应该如何将班级对象保存进Student对象呢?如果我将option的value设置为班级id,这样传给后台保存的话还需要根据id查找对应的班级对象啊,这是不是不太规范呢?
      

  3.   

    诶。突然发现<option value="c">${c.name}</option>这里应该用el表达式写value值才对,然后改成了<option value="${c}">${c.name}</option>这样之后,value值变成了“edu.gdut.studentmis.vo.Class@4eef2e49” ,这就是班级的对象吧!不过呢,这样进行保存还是会报ofclass列不能为空这样的错误
      

  4.   

    你在前台数据提交到action后,打印解析一下接受到的参数你就知道为什么会报那个错误了。
    你的思路没有错,在下拉框中添加id为value值,然后再查一遍数据,再做添加,这应该是最为安全的方法。h这个对对象操作不太灵活,所以现在都在用mybatis,楼主可以参考一下,希望能帮到你。
      

  5.   

    我还有个小问题——我数据库表中有一个字段设置了非空和默认值,我在jsp没有设置该字段的输入,进行保存时报错说该字段不能为空。(数据库用的是mysql)
      

  6.   

    这个简单,你随便传一个值,插入添加到mysql中这个值会自动被你设定的默认代替,最代表的就是主键。