1.第一种方法,通过属性驱动的方式获取页面传递的参数。这里需要注意的是Action的属性名称需要与页面的参数名称保持一致。
Action示例代码:
public class LoginOneAction {
private String userName;
private String password;
public String login(){
System.out.println("userName="+userName);
System.out.println("password="+password);
if (userName.equals(password)) {
return "success";
}
return "fail";
}
//=======setter AND getter方法==========
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;
}
}
在struts.xml配置中配置LoginOneAction,示例代码:
<package name="user-login" namespace="/userLogin" extends="struts-default">
<!-- action name请求的Action名称 class Action处理类对应具体路径 -->
<!-- method 指定默认的方法名,如果不指定就是execute方法 -->
<action name="loginOneAction" class="com.gx.web.LoginOneAction">
<result name="success" type="dispatcher">/jsp/successOne.jsp</result>
<result name="fail">/jsp/fail.jsp</result>
</action>
</package>
jsp页面代码(Action的属性名称需要与页面的参数名称保持一致):
<body>
<form action="${ctx}/userLogin/loginOneAction!login.action" method="get">
userName:<input type="text" name="userName">
<br>
password:<input type="password" name="password">
<br>
<button type="submit">登录</button>
</form>
</body>
2.第二种方法,与前面第一种方法相似,属性驱动还可以通过JavaBean的方式来获取页面传递的参数。首先需要封装对象,将页面参数封装到一个模型对象中,示例代码:
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String userName;
private String password;
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;
}
}
在Action中第一模型对象的属性,并写一个get和set方法,示例代码:
public class LoginTwoAction {
private User user;
//登录action方法
public String login(){
if (user.getUserName().equals(user.getPassword())) {
return "success";
}
return "fail";
}
//======getter and setter方法========
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
在struts.xml配置中配置LoginTwoAction,示例代码:
<package name="user-login" namespace="/userLogin" extends="struts-default">
<action name="loginTwoAction" class="com.gx.web.LoginTwoAction">
<result name="success">/jsp/successTwo.jsp</result>
<result name="fail">/jsp/fail.jsp</result>
</action>
</package>
Jsp页面的参数名称的写法与第一种方法不同,使用的是ognl表达式,示例代码:
<body>
<form action="${ctx}/userLogin/loginTwoAction!login.action" method="get">
userName:<input type="text" name="user.userName">
<br>
password:<input type="password" name="user.password">
<br>
<button type="submit">登录</button>
</form>
</body>
3.第三种方法,通过模型驱动的方式接受jsp页面传递的参数,实现方式:让Action实现一个ModelDriven的接口。这个接口需要我们实现一个 getModel的方法,这个方法返回的就是Action所使用的数据模型对象。这里使用的模型对象是第二个方法封装好的对象。示例代码:
public class LoginThreeAction implements ModelDriven<User> {
private User user;
@Override
public User getModel() {
if (user == null) {
user = new User();
}
return user;
}
// 登录action方法
public String login() {
if (user.getUserName().equals(user.getPassword())) {
return "success";
}
return "fail";
}
//========getter==========
public User getUser() {
return user;
}
}
在struts.xml配置中配置LoginThreeAction,示例代码:
<package name="user-login" namespace="/userLogin" extends="struts-default">
<action name="loginThreeAction" class="com.gx.web.LoginThreeAction">
<result name="success">/jsp/successTwo.jsp</result>
<result name="fail">/jsp/fail.jsp</result>
</action>
</package>
Jsp页面的参数名称需要与模型对象的属性名称保持一致,示例代码:
<body>
<form action="${ctx}/userLogin/loginThreeAction!login.action" method="get">
userName:<input type="text" name="userName">
<br>
password:<input type="password" name="password">
<br>
<button type="submit">登录</button>
</form>
</body>