java web从零单排第八期《struts2》与JavaBean的结合使用

在上一节介绍的例子中,Login.java里有username和password两个属性,并且有set和get方法,如果JSP中表单的数量较大,会导致一种现象,set和get方法大量的存在于action中,如果我们把这些属性封装在一个JavaBean中,通过struts2框架,会更清晰明了。

 

1.新建一个登陆实体类,LoginInfo.java

package bean;

public class LoginInfo {
	
	private String username;
	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;
	}
	private String password;

}


2.控制层Login.java

package controller;

import bean.LoginInfo;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport{
	
	
	private LoginInfo logininfo;
	
	public LoginInfo getLogininfo() {
		return logininfo;
	}
	public void setLogininfo(LoginInfo logininfo) {
		this.logininfo = logininfo;
	}
	@Override
	public void validate() {
		// TODO Auto-generated method stub
		super.validate();
		if("".equals(this.logininfo.getUsername()))
		{
			this.addFieldError("logininfo.username", "用户名不能为空");
		}
		if("".equals(this.logininfo.getPassword()))
		{
			this.addFieldError("logininfo.password", "密码不能为空");
		}
	}
	public String execute()
	{
		if(this.logininfo.getUsername().equals("hello")&&this.logininfo.getPassword().equals("struts2"))
		{
			return SUCCESS;
		}
		else
		{
			return ERROR;
		}
	}
}

声明了一个LoginInfo类型的变量,并设置了set和get方法。其中this.addFieldError("logininfo.username", "用户名不能为空");username也要改成logininfo.username。

3.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
  <body>
  <s:form action="login.action" method="post" name="login">
   <s:textfield name="logininfo.username" label="账号"></s:textfield>
   <br/>
   <s:textfield name="logininfo.password" label="密码"></s:textfield>
   <br/>
   <s:submit value="提交"></s:submit>
  </s:form>  
  </body>
</html>

其中name属性值有了变化都加上了logininfo,这样会自动封装到LoginInfo实体的属性中,如果名称不一致就不会完成自动封装,同学可以亲自试一试。

4.struts.xml文件没有变化,运行程序即可

 

5.尽管程序运行正确,但有一点,即:

private LoginInfo logininfo;


 

我们并没有为LoginInfo创建对象,正常创建对象应该如下:

	private LoginInfo logininfo = new LoginInfo();


这里其实用到java反射机制,如果对象为空,自动在底层通过反射机制实例化一个对象,然后调用其set方法。

你可能感兴趣的:(java,Web,jsp,struts2,javabean,login)