Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Struts 2.0操作的两个数据库表_Java_Hibernate_Jsp_Struts2 - Fatal编程技术网

Java 使用Struts 2.0操作的两个数据库表

Java 使用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

我试图用一个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.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>