如何设置操作链接以在使用struts2时从表中加载的表中删除该行

时间:2012-07-14 21:14:30

标签: struts2 action

我想从存储在数据库中的表中持久删除一行,该表正在jsp页面上显示。我有一个链接Delete(每行),只需点击一下即可删除该行。

我的jsp代码是:

    <s:iterator value="topperList" >
      <tr>
         <td><s:property value="uid"/></td>
         <td><s:property value="name"/></td>
         <td><s:property value="password"/></td>
         <td><s:property value="sex" /></td>
         <td><s:property value="age" /></td>
         <td><s:property value="city" /></td>
         <td><s:property value="abuse" /></td>
         <td><s:property value="lastlogin" /></td>
         <td><s:property value="points" /></td>
         <td><s:property value="joined" /></td>
         <td><s:property value="email" /></td>
         <s:url id="url" action="delete" >
           <s:param name="uid"><s:property value="uid" /></s:param>
         </s:url>
         <td><s:a href="%{url}">Delete</s:a></td>
      </tr> 
  </s:iterator>

我在动作类中的代码是:

private Integer uid;

public Integer getUid() {
    return uid;
}

public void setUid(Integer uid) {
    this.uid = uid;
}
public String delete() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Users user = (Users) session.load(Users.class, this.getUid());
        if (null != user) {
            session.delete(user);
        }
        session.getTransaction().commit();
           return SUCCESS;
    }
struts.xml中的

动作代码:

<action name="delete" class="com.rambo.action.FindToppers" method="delete" >
        <result name="success">buser.jsp</result>
    </action>

但我收到了错误:

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [beans.Users#0]

我看到表USERS with uid=56中有一行正确的行。但它显示没有标识符的行存在。 但是,我没有收到任何服务器错误日志。 有人可以指出可能出现的问题。

2 个答案:

答案 0 :(得分:0)

私人整数cid;

这应该是公开的,您可以将其更改为int

答案 1 :(得分:0)

我想我看到了问题。问题是操作中的属性cidnull(您可以执行System.out.println(cid))。如果打印null,则可能需要使用ParameterAware来捕获网址参数。