start.jsp :
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>Insert title here</title></head><body><a href="sample"><s:form/><s:textfield/><s:password/><s:checkbox/><s:radio/>標籤用法</a></body></html>
struts.xml :
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts> <package name="demo" extends="struts-default"> <action name="sample" class="action.SampleAction"> <result name="success">/showInfo.jsp</result> </action> </package></struts>
SampleAction.java :
public class SampleAction {private String username;private String password;private int age;private String email;private String gender;private boolean married;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;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public boolean isMarried() {return married;}public void setMarried(boolean married) {this.married = married;}public String execute(){username="tom";password="1234";age=25;email="helloworld@sina.cn";gender="M";married=true;return "success";}}
showInfo.jsp :
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><html><head><title>Insert title here</title></head><body><s:form action="sample" theme="simple">姓名:<s:textfield name="username"></s:textfield><br>密碼:<s:password name="password" showPassword="true"></s:password><br>年齡:<s:textfield name="age"></s:textfield><br>郵箱:<s:textfield name="email"></s:textfield><br>性別:<s:radio list='#{"F":"女","M":"男"}' name="gender"></s:radio><br>婚否:<s:checkbox name="married"></s:checkbox></s:form><s:debug></s:debug></body></html>
展開Debug:
我們如果不使用架構,一般流程是Servlet接受使用者請求,調用模型處理請求,得到處理結果,可以將結果綁定到request上接著轉寄到某個視圖頁面,在頁面中取出資料,進行展現。現在使用了Struts2,XxxAction就相當於Servlet,此處為了簡單起見,沒有調用模型處理請求得到資料,而是直接在Action中構造了一些資料,然後轉寄到視圖。我們並沒有將資料繫結到request或session上,為什麼能在視圖裡訪問這些資料呢?
答案就是Value Stack裡始終存放當前Action,而這些資料都在Action中,頁面訪問資料時採用ognl文法。這就是Struts2的做法。