Java 使用Struts 2.0操作的两个数据库表
我试图用一个Struts 2.0操作类将值保存到两个数据库表中 我已经尝试过实现ModelDriven,但它没有捕获两个VO。请给我一个解决方案来捕获同一struts 2.0操作类中的两个VO UserVO.java的代码SnipperJava 使用Struts 2.0操作的两个数据库表,java,hibernate,jsp,struts2,Java,Hibernate,Jsp,Struts2,我试图用一个Struts 2.0操作类将值保存到两个数据库表中 我已经尝试过实现ModelDriven,但它没有捕获两个VO。请给我一个解决方案来捕获同一struts 2.0操作类中的两个VO UserVO.java的代码Snipper package com.sajeewi.struts.vo; import static javax.persistence.GenerationType.IDENTITY; import java.util.Set; import javax.persi
package com.sajeewi.struts.vo;
import static javax.persistence.GenerationType.IDENTITY;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "user")
public class UserVO {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idUser", unique = true, nullable = false)
private int idUser;
@Column(name = "username", unique = true, nullable = false, length = 20)
private String username;
@Column(name = "password", unique = true, nullable = false, length = 20)
private String password;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "userVO", cascade = CascadeType.ALL)
private User_DetailsVO user_DetailsVO;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userVO")
private Set<AccountVO> accountVOs;
public UserVO() {
// TODO Auto-generated constructor stub
}
public UserVO(int idUser,String username,String password){
this.idUser = idUser;
this.username = username;
this.password = password;
}
public int getIdUser() {
return idUser;
}
public void setIdUser(int idUser) {
this.idUser = idUser;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User_DetailsVO getUser_DetailsVO() {
return user_DetailsVO;
}
public void setUser_DetailsVO(User_DetailsVO user_DetailsVO) {
this.user_DetailsVO = user_DetailsVO;
}
public Set<AccountVO> getAccountVOs() {
return accountVOs;
}
public void setAccountVOs(Set<AccountVO> accountVOs) {
this.accountVOs = accountVOs;
}
}
这是用户操作类
package com.sajeewi.struts.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.sajeewi.struts.dao.UserDAO;
import com.sajeewi.struts.dao.impl.UserDAOImpl;
import com.sajeewi.struts.vo.UserVO;
import com.sajeewi.struts.vo.User_DetailsVO;
@SuppressWarnings({ "serial" })
public class UserAction extends ActionSupport implements ModelDriven<Object>{
UserVO userVO = new UserVO();
User_DetailsVO detailsVO = new User_DetailsVO();
List<UserVO> userList = new ArrayList<UserVO>();
UserDAO userDAO = new UserDAOImpl();
public List<UserVO> getUserList() {
return userList;
}
public void setUserList(List<UserVO> userList) {
this.userList = userList;
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public UserVO getUserVO() {
return userVO;
}
public void setUserVO(UserVO userVO) {
this.userVO = userVO;
}
public User_DetailsVO getDetailsVO() {
return detailsVO;
}
public void setDetailsVO(User_DetailsVO detailsVO) {
this.detailsVO = detailsVO;
}
public String addUser(){
// userDAO.saveUser(this.userVO);
// userList = null;
// try {
// userList = userDAO.searchAllUsers();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
System.out.println(this.userVO);
System.out.println(this.detailsVO);
return SUCCESS;
}
public Object getModel() {
return userVO;
}
}
package com.sajeewi.struts.action;
导入java.util.ArrayList;
导入java.util.List;
导入com.opensymphony.xwork2.ActionSupport;
导入com.opensymphony.xwork2.ModelDriven;
导入com.sajeewi.struts.dao.UserDAO;
导入com.sajeewi.struts.dao.impl.UserDAOImpl;
导入com.sajeewi.struts.vo.UserVO;
导入com.sajeewi.struts.vo.User_DetailsVO;
@抑制警告({“串行”})
公共类UserAction扩展ActionSupport实现模型驱动{
UserVO UserVO=新的UserVO();
User_DetailsVO DetailsVO=新用户_DetailsVO();
List userList=new ArrayList();
UserDAO UserDAO=new UserDAOImpl();
公共列表getUserList(){
返回用户列表;
}
public void setUserList(List userList){
this.userList=userList;
}
公共UserDAO getUserDAO(){
返回userDAO;
}
公共void setUserDAO(UserDAO UserDAO){
this.userDAO=userDAO;
}
public UserVO getUserVO(){
返回userVO;
}
公共void setUserVO(UserVO UserVO){
this.userVO=userVO;
}
公共用户_DetailsVO getDetailsVO(){
返回详细信息SVO;
}
public void setDetailsVO(用户\u DetailsVO DetailsVO){
this.detailsVO=detailsVO;
}
公共字符串addUser(){
//userDAO.saveUser(this.userVO);
//userList=null;
//试一试{
//userList=userDAO.searchAllUsers();
//}catch(异常e){
////TODO自动生成的捕捉块
//e.printStackTrace();
// }
System.out.println(this.userVO);
System.out.println(this.detailsVO);
回归成功;
}
公共对象getModel(){
返回userVO;
}
}
Jsp视图
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>User</title>
</head>
<body>
<s:div>
<h2>Registration With Struts 2.0</h2>
<s:form action="addUser" method="POST">
<s:div>
<h4>Enter User Credentials</h4>
<s:textfield name="username" label="Username"></s:textfield>
<s:password name="password" label="Password"></s:password>
</s:div>
<br>
<s:textfield name="contact1" label="Contact1 "></s:textfield>
<s:textfield name="contact2" label="Contact2 "></s:textfield>
<s:textfield name="email" label="E-Mail "></s:textfield>
<s:textfield name="add1" label="Address Line 1 "></s:textfield>
<s:textfield name="add2" label="Address Line 2 "></s:textfield>
<s:textfield name="city" label="City "></s:textfield>
<br>
<s:submit name="Save" value="Save"></s:submit>
</s:form>
</s:div>
</body>
</html>
使用者
使用Struts 2.0注册
输入用户凭据
我想用相同的表单保存到两个表
谢谢好的,所以您有一个单独的表来存储用户信息,但所有这些信息都是从单个表单读取的。在这种情况下,它很简单 不要使用模型驱动,因为所有表单字段都不存在于单个类中,否则您可以使用一个bean类(我不建议这样做)。在action类中使用getters n setters在两个类对象
UserVO
和User\u DetailsVO
中填充相应的值
现在你要做的就是:
Session session = SessionFactory.openSession();
session.save(userVO);
int savedId = userVO.getIdUser();
detailsVO. setUser_idUser(savedId);
session.save(detailsVO);
session.close();
我无法在您的表中猜出哪个是主键,哪个是外键。因此,保存主对象,然后保存另一个具有FK的对象。得到解决方案。我已经像这样更改了我的JSP 以前
<s:textfield name="username" label="Username"></s:textfield>
现在
我所要做的就是将VO name添加到textfield name中,然后它会自动捕获action类中UserVO和User_DetailsVO的所有数据
谢谢你,亲爱的,我有解决办法了。谢谢你的解决方案你确定。。。我怀疑它会起作用?由于ModelDriven只返回userVO。。。用户_DetailsVO字段将如何填充?@DarkHorse ModelDriven在推送操作后推送模型。如果操作没有被推送,那么I18N就不会工作。@DaveNewton我知道,但是他的getModel()只返回userVO对象。您是否强调,由于他的action类包含detailsVO的getter和setter,即使它们也会被填充?@DarkHorse是的,因为action在堆栈上。
<s:textfield name="username" label="Username"></s:textfield>
<s:textfield name="userVO.username" label="Username"></s:textfield>