0. 前言
習慣了利用html标簽進行輸入的開發者,是否回想過利用Struts架構的輸入标簽進行開發呢。不用擔心,所有的Struts架構在浏覽器端解碼後都是我們熟悉的源碼,但是使用架構,說到底也隻是為了規範化,子產品化,便于後期的修改、團隊的分工合作和定位出錯。是以Struts輸入标簽的便捷與靈活就使得其獨具魅力。
1.struts-html.tld
tld就是taglib description的縮寫,是标簽庫。struts-html.tld提供了許多替代html标簽的寫法,這種寫法與struts架構相适應,因為可以通過配置檔案直接和ActionForm、Action進行連接配接,省去了很多麻煩。
2.功能實作——注冊頁面
1.配置strust-config.xml
<action name="regForm" path="/reg" type="Action.RegAction"></action>
<form-bean name="regForm" type="Action.RegForm"></form-bean>
2.編寫reg.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
<head>
<meta charset="UTF-8">
<title>注冊頁面</title>
</head>
<body>
<html:form action="/reg" method="get">
請輸入您的賬号(文本框):<html:text property="account"></html:text>
<br>請您輸入密碼<html:password property="password"></html:password>
<br>請您輸入個人資訊(多行文本框)
<!--在Struts标簽中,系統看到某個property,如果沒有手動設定value,就會調用AcntionForm的getter方法來擷取初始值 -->
<br><html:textarea property="info" rows="5" cols="40"></html:textarea>
<br><html:submit value="送出注冊資訊"></html:submit>
</html:form>
</body>
</html>
這裡的"/reg"經過strust-config.xml的配置,系統會知道應該把表單送出到何處。
3.RegForm.java
package Action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/**
* 作用:
*@author 歐世樂
*/
public class RegForm extends ActionForm{
private String account;
private String password;
private String info;
/**
* @return the info
*/
public String getInfo() {
return info;
}
/**
* @param info the info to set
*/
public void setInfo(String info) {
this.info = info;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the account
*/
public String getAccount() {
return account;
}
/**
* @param account the account to set
*/
public void setAccount(String account) {
this.account = account;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}
}
reg.jsp中每一個struts标簽都需要在RegForm.java中有對應的屬性、getter、setter方法。不然會報錯,除非填寫value屬性,因為在Struts标簽中,系統看到某個property,如果沒有手動設定value,就會調用AcntionForm的getter方法來擷取初始值。
4.RegAction.java
package Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import Action.RegForm;
public class RegAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RegForm regForm = (RegForm) form;// TODO Auto-generated method stub
request.setAttribute("regForm", regForm);
return new ActionForward("/regResult.jsp");
}
}
注意繼承Action接口,其中 request.setAttribute(“regForm”, regForm);不寫也可以,Struts架構已經幫我們做了這一步,在結果頁面直接request.getAttribute(“regForm”)就可以了。
5.regResult.jsp
<%@page import="Action.RegForm"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注冊資訊</title>
</head>
<body>
<%
RegForm regForm=(RegForm)request.getAttribute("regForm");
%>
賬号:<%=regForm.getAccount() %>
密碼:<%=regForm.getPassword() %>
個人資訊:<%=regForm.getInfo() %>
</body>
</html>
3.小結
Struts标簽庫為開發者提供的極大地便利,規範化的編寫和程式之間低耦合的特性讓其顯得十分有魅力,它是後續其他優秀架構的借鑒。