使用休眠和挂毯 JAVA
Using hibernate and tapestry JAVA
我在使用 Tapestry 5 时遇到问题。当我尝试从 table 中删除用户时,该 table 在单元格上有操作 link 它不会删除该用户,它总是删除 table 上的最后一个用户=34=]...这是我的代码:
ViewAllUsers.java
public class ViewAllUsers {
@Inject
private Session session;
@Property
@SessionState
private User loginUser;
@Property
@Persist
private User user;
public List<User> getAllUsers() {
return session.createCriteria(User.class).list();
}
@CommitAfter
void onActionFromIzbrisi() {
session.delete(user);
}
}
ViewAllUsers.tml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<title></title>
</head>
<body>
<t:Alerts />
<t:Grid t:source="allusers" t:add="Izbrisi,Edit" t:row="user">
<p:izbrisiCell>
<t:actionlink t:id="izbrisi" t:context="user">Delete</t:actionlink>
</p:izbrisiCell>
<p:editCell>
<t:PageLink t:page="EditUser" t:id="edit" t:context="user"> Edit </t:PageLink>
</p:editCell>
<p:deleteOptionCell>
</p:deleteOptionCell>
</t:Grid>
</body>
</html>
编辑:
我在这里所要做的就是在删除文件的方法的构造函数中传递一个参数(对象或 ID)。
刚刚更换
@CommitAfter
void onActionFromIzbrisi() {
session.delete(user);
}
与:
@CommitAfter
void onActionFromIzbrisi(User user) {
session.delete(user);
}
我认为您不能像那样直接在 t:context
中传递 User
实例。通用对象实例不能直接在客户端和服务器之间传递。您必须将某种引用传递给您的实例 - 通常是一个 id - 您的 onActionFromIzbrisi()
方法可以使用它来检索实际对象。
根据 the doc for ActionLink
,t:context
属性表示
The context for the link (optional parameter). This list of values
will be converted into strings and included in the URI.
该文档页面还显示了如何传递对象的示例。
我在使用 Tapestry 5 时遇到问题。当我尝试从 table 中删除用户时,该 table 在单元格上有操作 link 它不会删除该用户,它总是删除 table 上的最后一个用户=34=]...这是我的代码:
ViewAllUsers.java
public class ViewAllUsers {
@Inject
private Session session;
@Property
@SessionState
private User loginUser;
@Property
@Persist
private User user;
public List<User> getAllUsers() {
return session.createCriteria(User.class).list();
}
@CommitAfter
void onActionFromIzbrisi() {
session.delete(user);
}
}
ViewAllUsers.tml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<title></title>
</head>
<body>
<t:Alerts />
<t:Grid t:source="allusers" t:add="Izbrisi,Edit" t:row="user">
<p:izbrisiCell>
<t:actionlink t:id="izbrisi" t:context="user">Delete</t:actionlink>
</p:izbrisiCell>
<p:editCell>
<t:PageLink t:page="EditUser" t:id="edit" t:context="user"> Edit </t:PageLink>
</p:editCell>
<p:deleteOptionCell>
</p:deleteOptionCell>
</t:Grid>
</body>
</html>
编辑:
我在这里所要做的就是在删除文件的方法的构造函数中传递一个参数(对象或 ID)。
刚刚更换
@CommitAfter
void onActionFromIzbrisi() {
session.delete(user);
}
与:
@CommitAfter
void onActionFromIzbrisi(User user) {
session.delete(user);
}
我认为您不能像那样直接在 t:context
中传递 User
实例。通用对象实例不能直接在客户端和服务器之间传递。您必须将某种引用传递给您的实例 - 通常是一个 id - 您的 onActionFromIzbrisi()
方法可以使用它来检索实际对象。
根据 the doc for ActionLink
,t:context
属性表示
The context for the link (optional parameter). This list of values will be converted into strings and included in the URI.
该文档页面还显示了如何传递对象的示例。