Struts2 从表单中获取数据到单独的 Class
Struts2 Get Data From Form Into a Separate Class
这将是一个有点奇怪的问题,我会尽力解释它,但请耐心等待。
我有一个 .jsp 页面,其中包含用于输入信息的表单,一个 SubmitAction.java 页面用于处理 struts 操作,还有一个 Request.java 页面只是我所有数据的容器(出于这个问题的目的,它被剥离了。实际上它包含更多数据)。
我的主要问题是我无法让 Request 对象了解输入 NewForm.jsp 的任何数据。例如,在调试时,在 constructInsertStatement() 函数内部,myTextBox 的值始终为 null。
我会 post 我有什么,希望有人能告诉我我缺少什么。
NewForm.jsp
<html>
<head>
<sx:head />
</head>
<body>
<s:form action="submitNew" method="post" namespace="/">
<s:textfield label="Text Box" name="myTextBox"
<s:submit label="Submit" name="submit_btn" align="center" />
</s:form>
</body>
</html>
提交Action.java
public class SubmitAction extends ActionSupport {
private Request request = new Request();
public void executeInsert() throws SQLException{
Connection conn = null;
PreparedStatement ps = null;
try {
ps = request.constructInsertStatement();
// execute the INSERT Statement
ps.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}finally {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
}
}
}
Request.java
public class Request {
private String myTextBox;
public PreparedStatement constructInsertStatement() throws SQLException{
PreparedStatement ps = null;
Connection conn = null;
String URL = "myURL";
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
conn = DriverManager.getConnection(URL, "defaultUser", "defaultPassword");
String sql = "INSERT INTO `myTable` (SomeText)";
sql += "VALUES";
sql+="(?)";
ps = conn.prepareStatement(sql);
try{
ps.setString(1, myTextBox);
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return ps;
}
public String getmyTextBox() {
return myTextBox;
}
public void setmyTextBox(String myTextBox) {
this.myTextBox = myTextBox;
}
Struts.xml动作
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="submitNew"
class="my.package.path.SubmitAction" method="executeInsert">
<result name="success">NewForm.jsp</result>
</action>
</package>
</struts>
要获得 Request
对象,您应该有一个 getter
public Request getMyRequest() { return request; }
要为此对象设置值,您需要有效的 getter 和设置器
public String getMyTextBox() {
return myTextBox;
}
public void setMyTextBox(String myTextBox) {
this.myTextBox = myTextBox;
}
如果您想了解有关 OGNL 如何访问 bean 属性的更多信息,请参阅 答案。
要将此对象绑定到文本字段,您应该在名称属性中使用指向 属性 的路径。
<s:textfield label="Text Box" name="myRequest.myTextBox" />
这将是一个有点奇怪的问题,我会尽力解释它,但请耐心等待。
我有一个 .jsp 页面,其中包含用于输入信息的表单,一个 SubmitAction.java 页面用于处理 struts 操作,还有一个 Request.java 页面只是我所有数据的容器(出于这个问题的目的,它被剥离了。实际上它包含更多数据)。
我的主要问题是我无法让 Request 对象了解输入 NewForm.jsp 的任何数据。例如,在调试时,在 constructInsertStatement() 函数内部,myTextBox 的值始终为 null。
我会 post 我有什么,希望有人能告诉我我缺少什么。
NewForm.jsp
<html>
<head>
<sx:head />
</head>
<body>
<s:form action="submitNew" method="post" namespace="/">
<s:textfield label="Text Box" name="myTextBox"
<s:submit label="Submit" name="submit_btn" align="center" />
</s:form>
</body>
</html>
提交Action.java
public class SubmitAction extends ActionSupport {
private Request request = new Request();
public void executeInsert() throws SQLException{
Connection conn = null;
PreparedStatement ps = null;
try {
ps = request.constructInsertStatement();
// execute the INSERT Statement
ps.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}finally {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
}
}
}
Request.java
public class Request {
private String myTextBox;
public PreparedStatement constructInsertStatement() throws SQLException{
PreparedStatement ps = null;
Connection conn = null;
String URL = "myURL";
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
conn = DriverManager.getConnection(URL, "defaultUser", "defaultPassword");
String sql = "INSERT INTO `myTable` (SomeText)";
sql += "VALUES";
sql+="(?)";
ps = conn.prepareStatement(sql);
try{
ps.setString(1, myTextBox);
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return ps;
}
public String getmyTextBox() {
return myTextBox;
}
public void setmyTextBox(String myTextBox) {
this.myTextBox = myTextBox;
}
Struts.xml动作
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="submitNew"
class="my.package.path.SubmitAction" method="executeInsert">
<result name="success">NewForm.jsp</result>
</action>
</package>
</struts>
要获得 Request
对象,您应该有一个 getter
public Request getMyRequest() { return request; }
要为此对象设置值,您需要有效的 getter 和设置器
public String getMyTextBox() {
return myTextBox;
}
public void setMyTextBox(String myTextBox) {
this.myTextBox = myTextBox;
}
如果您想了解有关 OGNL 如何访问 bean 属性的更多信息,请参阅
要将此对象绑定到文本字段,您应该在名称属性中使用指向 属性 的路径。
<s:textfield label="Text Box" name="myRequest.myTextBox" />