首先寫一個簡單的測試程序
1)jsp頁面主要內(nèi)容如下(JSP頁面名稱為form-tag.jsp):
<s:debug></s:debug><s:form action="userAction_save" method="post"><s:textfield name="name" label="姓名"></s:textfield><s:passWord name="password" label="密碼"></s:password><s:textfield name="desc" label="簡介"></s:textfield><s:checkbox name="married" label="婚否"></s:checkbox><s:submit></s:submit></s:form>
2)java代碼如下:
package com.mystudy.struts.formtag;public class UserAction {PRivate String name;private String password;private String desc;private boolean married;//private boolean married = true;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public boolean isMarried() {return married;}public void setMarried(boolean married) {this.married = married;}public String save() throws Exception{System.out.println(this);return "form";}@Overridepublic String toString() {return "UserAction [name=" + name + ", password=" + password+ ", desc=" + desc + ", married=" + married + "]";}}3)struts.xml的主要配置如下:
<action name="userAction_*" class="com.mystudy.struts.formtag.UserAction" method="{1}"><result name="form">/form-tag.jsp</result></action>接下來將其在tomcat中部署并運行,效果如下圖所示:

這時,我們打開[Debug]查看值棧ValueStack中對象棧的內(nèi)容如下圖所示。我們看到其中并沒有Action對象,這是因為我們是直接通過鏈接訪問這個JSP頁面的,而沒有經(jīng)過Action。
在我們填完表單并提交之后,再次來查看[Debug]的內(nèi)容,如下圖所示。這時,我們在值棧中能夠看到Action對象已經(jīng)被放入到值棧之中,并且其屬性與屬性值與JSP表單中是對應(yīng)著的。
%20
===》
因此結(jié)合對值棧的一些了解,可以推斷出Struts2進行表單回顯的方法是:
結(jié)論:Struts2將從值棧的棧頂對象開始查找與JSP頁面匹配的屬性,并把配置的屬性值賦值到對應(yīng)的標簽的value中,若棧頂對象沒有對應(yīng)的屬性,則依次向下查找相對應(yīng)的屬性。
新聞熱點
疑難解答