如何将变量传递到下一个Struts页面?

问题描述 投票:0回答:3

我想将

getGneratedKeys()
,也称为
last_generated_id
,从当前的Java类传递到下一个类。然而,我对如何存储收集下一个Java类的ID以供此类使用一无所知。

场景是

insert.jsp
将所有字符串和int插入我的MySQL数据库。第二页
UserImage.jsp
会将图像上传到与insert.jsp
相同的表和相同的记录中。
这意味着 
UserImage
 查询将是 
update 查询,而不是 insert 查询。

Save.java

insert.jsp
的关联类):

public String execute() { int i = 0; //SELECT LAST_INSERT_ID(); try{ Class.forName("com.mysql.jdbc.Driver"); java.sql.Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=convertToNull","root","8899"); String s = "insert into usertable(userNRIC, userName, userEmail, userPW, userContact, userAddress, catID, catTypeID, sectionID, status" + ") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) "; PreparedStatement ps=con.prepareStatement(s, Statement.RETURN_GENERATED_KEYS); ps.setString(1, mb.getUserNRIC()); ps.setString(2, mb.getUserName()); ps.setString(3, mb.getUserEmail()); ps.setString(4, mb.getUserPW()); ps.setInt(5, mb.getUserContact()); ps.setString(6, mb.getUserAddress()); ps.setInt(7, mb.getCatID()); ps.setInt(8, mb.getCatTypeID()); ps.setInt(9, mb.getSectionID()); ps.setString(10, mb.getStatus()); ps.executeUpdate(); con.commit(); ResultSet rs = ps.getGeneratedKeys(); if (rs != null && rs.next()) { i = rs.getInt(1); //ps.setInt(i, mb.getUserID("UserID")); } ps.close(); con.close(); } catch (Exception e) { e.printStackTrace(); addActionError(e.getMessage()); } return SUCCESS; }

FileUploadAction.java

UserImage.jsp
的关联类):

public String execute(){ int i = 0; connection = getConnection(); String query = "update usertable set userPhoto=? where userID=?"; try { String filePath = servletRequest.getSession().getServletContext().getRealPath("/"); System.out.println("Server path:" + filePath); File fileToCreate = new File(filePath, this.userImageFileName); FileUtils.copyFile(this.userImage, fileToCreate); //String uniqueFileName = fileToCreate.getPath(); pst = connection.prepareStatement(query); pst.setString(1, this.userImageFileName); i = pst.executeUpdate(); } catch (Exception e) { e.printStackTrace(); addActionError(e.getMessage()); return INPUT; } return SUCCESS; }
    
struts2
3个回答
0
投票
算法:

Record record = Fire the select query based on userID ordered by last insertion If record is found then get the generated value from first record update the record Else insert new record


根据您的评论

用户旅程:

Student.jsp

 -> 
UserImage.jsp


只需将自动生成的随机密钥存储为请求属性,并将其传递给客户端到

UserImage.jsp

,并在单击上传按钮时发送回服务器。

了解更多关于

将数据从 Java Servlet 传递到 JSP?


0
投票
简单地

get last inserted id

同时更新时间。

Statement stmt = con.createStatement(); String query = "SELECT max(userID) FROM usertable"; int my_last_generated_id = stmt.executeQuery(query).uniqueResult();

还有你的更新帖子

pst = connection.prepareStatement(query); pst.setString(1, this.userImageFileName); pst.setInt(2, my_last_generated_id ); i = pst.executeUpdate();
    

0
投票
在操作类中,您应该创建一个属性(带有 getter 和 setter)来保存

getGeneratedKeys

 中的值。让它成为您通过第一个操作初始化的
last_generated_id

该操作返回

UserImage.jsp

,您可以在其中使用绑定到包含值的操作属性的 
hidden 字段。

当您将表单提交到第二个操作时,该值将填充到第二个操作属性中。因此,当您需要在执行第二个操作时使用它时,您可以轻松完成。

因为您对操作使用不同的类,所以您应该在两个类中创建此属性。请注意,OGNL 通过提供适当的操作配置来正确绑定和填充隐藏字段。

© www.soinside.com 2019 - 2024. All rights reserved.