Struts 2のラベルライブラリ(5)



6.8 selectラベル
以下のコードはすべて6.3に基づいています.
 
selectラベルはドロップダウン・リスト・ボックスを生成するために使用されます.リスト属性を指定する必要があります.リストはコレクションでもmapでも構いません.
 
共通のプロパティ:
●listKey:集合要素の属性(例えば集合要素がPersonインスタンス、Personインスタンスのname属性)をチェックボックスのvalueとして指定します.mapの場合は、keyとvalueを使用して、Mapオブジェクトのkeyとvalueをそれぞれ表すチェックボックスのvalueとして使用できます.
●listValue:チェックボックスのラベルとして、集合要素の属性を指定します.mapの場合は、キーとvalueがそれぞれMapオブジェクトのキーとvalueを表すチェックボックスラベルとして使用できます.
●multiple:このリストボックスが複数選択可能かどうかを設定する
 
s-select.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:select       </title>
<s:head/>
</head>
<body>
<h3>  s:select       </h3>
<s:form action="selectAction" method="post" theme="css_xhtml">
	<!--                -->
	<s:select name="a" label="         " labelposition="top" 
		multiple="true" list="{'Struts 2    ','   Java EE      ', 'JavaScript: The Definitive Guide'}"/>
		
	<!--     Map           -->
	<s:select name="b" label="           " labelposition="top" 
		list="#{'Struts 2    ':'2007 10 ','   Java EE      ':'2007 4 ', '  Ajax  ':'2007 6 '}"
		listKey="key" listValue="value"/>
		
	<!--     JavaBean   -->
	<s:bean name="js.BookService" id="bs"/>
	<!--         JavaBean           -->
	<s:select name="b" label="         " labelposition="top"
		multiple="true" list="#bs.books" listKey="author" listValue="name"/>
	<hr/>	
	<s:submit align="left"></s:submit>
	<br/>
	<table border="1">
		<tr>
			<td><s:select name="c" list="#request.list"></s:select></td>
			<td><s:select name="d" list="#request.map" listValue="value" listKey="key"></s:select></td>
		</tr>
	</table>
</s:form>
</body>
</html>

SelectAction 
package js;

import java.util.*;

import com.opensymphony.xwork2.ActionSupport;

public class SelectAction extends ActionSupport {

    private String a = "";
    private String[] b;
    private String c = "";
    private String d = "";
    private List<String> list = new ArrayList<String>();
    private Map<String, String> map = new HashMap<String, String>();
    
    public String execute() throws Exception {
        list.add(" "); list.add("  "); list.add(" "); list.add(" ");
        map.put("a", " "); map.put("b", "  "); map.put("c", "  "); map.put("d", "  ");
        System.out.println("a : " + a);
        if (b != null) {
            System.out.println("b : " + b.length);
            for(String t : b){
                System.out.println(t);
            }
        }        
        System.out.println("c : " + c);
        System.out.println("d : " + d);
        
        return SUCCESS;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String[] getB() {
        return b;
    }

    public void setB(String[] b) {
        this.b = b;
    }

    public String getC() {
        return c;
    }

    public void setC(String c) {
        this.c = c;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public String getD() {
        return d;
    }

    public void setD(String d) {
        this.d = d;
    }

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

   
}

 struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.2.dtd">

<struts>
	<constant name="struts.custom.i18n.resources"
		value="messageResource"/>
	<constant name="struts.i18n.encoding" value="GBK"/>	
	<package name="js"  extends="struts-default" namespace="/09">		
		<action name="selectAction" class="js.SelectAction">
			<result name="success">/09/s-select.jsp</result>  
		</action>					
		<action name="">
			<result>.</result>
		</action>
	</package>	
</struts>
 
<s:a href="" onclick="newWin('09/selectAction.action');" cssStyle="cursor: hand;">s-select.jsp</s:a>

BookService 
package js;

public class BookService {
    public Book[] getBooks() {
        return new Book[]{
            new Book("  Java  ","  "),
            new Book("Struts 2    ","  "),
            new Book("   Java EE      ","  "),
            new Book("  Ajax  ","  ")
        };
    }
}

Book 
package js;

public class Book {

    private String name;
    private String author;

    public Book() {
    }
    public Book(String name, String author) {
        this.name = name;
        this.author = author;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getAuthor() {
        return this.author;
    }
}
 
6.9 radioラベル
以下のコードはすべて6.3に基づいています.
 
js.BookService.JAvaの前の例はすでに存在します
 
s-radio.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:radio       </title>
<s:head/>
</head>
<body>
<s:form action="radioAction" method="post" theme="css_xhtml">
	<h3>  s:radio       </h3>
	<!--                -->
	<s:radio name="a" label="         " labelposition="top"
		list="{'Struts 2    ','   Java EE      ','  Ajax  '}"/>
		
	<!--     Map           -->
	<s:radio name="b" label="           " labelposition="top"
		list="#{'Struts 2    ':'2007 10 ','   Java EE      ':'2007 4 ' , '  Ajax  ':'2007 6 '}"
		listKey="key" listValue="value"/>
		
	<!--     JavaBean   -->
	<s:bean name="js.BookService" id="bs"/>
	<!--         JavaBean           -->
	<s:radio name="c" label="         " labelposition="top"
		list="#bs.books" listKey="author" listValue="name"/>
		
	<hr/>
	<s:submit align="left"></s:submit>
	<br/>
	<table border="1" bgcolor="red">
		<tr>
			<td> <s:radio list="#request.list" name="d"></s:radio>	</td>
			<td> <s:radio list="#request.map" name="e" listKey="key" listValue="value"></s:radio>	</td>			
		</tr>
		<tr>
			<td>
				<input type="radio" name="f" value="aradio"> 1</input>
				<input type="radio" name="f" value="bradio"> 2</input>
			</td>
		</tr>
	</table>
</s:form>
</body>
</html>
 
RadioAction
package js;

import java.util.*;
import com.opensymphony.xwork2.ActionSupport;

public class RadioAction extends ActionSupport {

    private String a = "";
    private String b = "";
    private String c = "";
    private String d = "";
    private String e = "";
    private String f = "";
    private List<String> list = new ArrayList<String>();
    private Map<String, String> map = new HashMap<String, String>();
    
    public String execute() throws Exception {
        list.add(" "); list.add("  "); list.add(" "); list.add(" ");
        map.put("a", " "); map.put("b", "  "); map.put("c", "  "); map.put("d", "  ");
        System.out.println("a : " + a);
        System.out.println("b : " + b);
        System.out.println("c : " + c);
        System.out.println("d : " + d);
        System.out.println("e : " + e);
        System.out.println("f : " + f);
        return SUCCESS;
    }

    public String getA() { return a;}
    public void setA(String a) { this.a = a; }
    public String getB() { return b;  }
    public void setB(String b) {   this.b = b;   }
    public String getC() {   return c;  }
    public void setC(String c) {   this.c = c;}
    public String getD() {    return d;  }
    public void setD(String d) {    this.d = d;  }
    public List<String> getList() {    return list;   }
    public void setList(List<String> list) {   this.list = list;  }
    public Map<String, String> getMap() {   return map;  }
    public void setMap(Map<String, String> map) {   this.map = map;   }
    public String getE() {   return e;  }
    public void setE(String e) {  this.e = e; }
    public String getF() {  return f; }
    public void setF(String f) {     this.f = f; }
}
 
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.2.dtd">
<struts>
	<constant name="struts.custom.i18n.resources"
		value="messageResource"/>
	<constant name="struts.i18n.encoding" value="GBK"/>	
	<package name="js"  extends="struts-default" namespace="/09">		
		<action name="radioAction" class="js.RadioAction">
			<result name="success">/09/s-radio.jsp</result>  
		</action>
		<action name="">
			<result>.</result>
		</action>
	</package>	
</struts>
 
<s:a href="" onclick="newWin('09/radioAction.action');" cssStyle="cursor: hand;">s-radio.jsp</s:a>
 
 
6.10 optgroupラベル
以下のコードはすべて6.3に基づいています.
 
optgroupはドロップダウンボックスのオプショングループを生成するために使用されるため、に置く必要があります.に表示されます.
 
s-optgroup.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:optgroup           </title>
<s:head/>
</head>
<body>
<h3>  s:optgroup           </h3>
<s:form action="optgroupAction" method="post" theme="css_xhtml">
	<!--     Map         -->
	<s:select label="        " name="book" size="7"
		list="#{'Struts 2    ':'  ','   Java EE      ':'  ','  Ajax  ':'  '}"
		listKey="value"	listValue="key">
		<!--   Map             -->
		<s:optgroup label="Rod Johnson" 
			list="#{'Expert One-on-One J2EE Design and Development':'Johnson'}"
			listKey="value"	listValue="key"/>
		<s:optgroup label="David Flanagan"
			list="#{'JavaScript: The Definitive Guide':'David'}"
			listKey="value"	listValue="key"/>
	</s:select>
	<hr/>
	<s:submit align="left"></s:submit> <br/>
	<table border="1" >
		<tr>
			<td>
				<s:select name="book1" list="#request.map" listKey="key" listValue="value">
					<s:optgroup list="#request.map1"  listKey="key" listValue="value" label="test"></s:optgroup>					
				</s:select>
			</td>
			<td>
				<s:select name="book2" list="#request.list" >
					<s:optgroup list="#request.map1"  listKey="key" listValue="value" label="test"></s:optgroup>									
				</s:select>
			</td>
		</tr>
	</table>
</s:form>
</body>
</html>

OptgroupAction 
package js;

import java.util.*;

import com.opensymphony.xwork2.ActionSupport;

public class OptgroupAction extends ActionSupport {

    private String book = "";
    private String book1 = "";
    private String book2 = "";
    private Map<String, String> map = new HashMap<String, String>();
    private Map<String, String> map1 = new HashMap<String, String>();
    private List<String> list = new ArrayList<String>();
    private List<String> list1 = new ArrayList<String>();
  
    public String execute() throws Exception {
       
        System.out.println("book : " + book);
        System.out.println("book1 : " + book1);
        System.out.println("book2 : " + book2);
        map.put("a", "  ");map.put("b", "  ");map.put("c", "  ");map.put("d", "  ");
        map1.put("a1", "  1");map1.put("b1", "  1");map1.put("c1", "  1");map1.put("d1", "  1");
        list.add(" ");list.add("       ");list.add("      ");list.add("   ");list.add(" 22");list.add(" 1");
        list1.add("a");list1.add("b");list1.add("c");list1.add("d");list1.add("e");
        return SUCCESS;
    }
    public String getBook() {        return book;    }
    public void setBook(String book) {        this.book = book;    }
    public String getBook1() {        return book1;    }
    public void setBook1(String book1) {        this.book1 = book1;    }
    public Map<String, String> getMap() {        return map;    }
    public void setMap(Map<String, String> map) {        this.map = map;    }
    public Map<String, String> getMap1() {        return map1;    }
    public void setMap1(Map<String, String> map1) {        this.map1 = map1;    }
    public List<String> getList() {        return list;    }
    public void setList(List<String> list) {        this.list = list;    }
    public List<String> getList1() {        return list1;    }
    public void setList1(List<String> list1) {        this.list1 = list1;    }
    public String getBook2() {        return book2;    }
    public void setBook2(String book2) {        this.book2 = book2;    }    
}

struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.2.dtd">
<struts>
	<constant name="struts.custom.i18n.resources"
		value="messageResource"/>
	<constant name="struts.i18n.encoding" value="GBK"/>	
	<package name="js"  extends="struts-default" namespace="/09">
		<action name="optgroupAction" class="js.OptgroupAction">
			<result name="success">/09/s-optgroup.jsp</result>  
		</action>	
		<action name="">
			<result>.</result>
		</action>
	</package>	
</struts>
 <s:a href="" onclick="newWin('09/optgroupAction.action');" cssStyle="cursor: hand;">s-optgroup.jsp</s:a>

optgroupタグは、mapでしかlistは使えないようです
 
6.11 tokenラベル
以下のコードはすべて6.3に基づいています.
 
フォームの複数回のコミットを防止するためのラベル.ラベルが必要な場合は、Struts 2のプロファイルでTokenInterceptorブロッカーまたはTokenSessionStoreInterceptorブロッカーを起動する必要があります.
 
実装原理:フォームに非表示ドメインを追加し、ページをロードするたびに非表示ドメインの値が異なります.一方、TokenInterceptorブロッカーは、すべてのユーザ要求をブロックし、このtokenが非表示ドメインに対応する値が同じ(前回のコミット時にtoken非表示ドメインの値がsessionに保存された)ことを2回要求した場合、フォームのコミットをブロックする
 
注:デフォルトでは、tokenラベルで生成される非表示ドメインのnameはstrutsです.token .したがって、strutsという名前をフォームに追加しないでください.tokenのフォームドメイン
 
s-token.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:token      </title>
</head>
<body>
<h3>  s:token      </h3>
<s:form action="pro">
	<!--       -->
	<s:textfield name="book" key="book"/>
	<!--       token -->
	<s:token/>
	<s:submit value="  "/>
</s:form>
</body>
</html>

ProAction 
package js;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class ProAction implements Action {
    private String book;

    public void setBook(String book) {
        this.book = book;
    }

    public String getBook() {
        return this.book;
    }

    //       ,      ,   SUCCESS
    public String execute() throws Exception {
        ActionContext ctx = ActionContext.getContext();
        ctx.put("book", getBook());
        return SUCCESS;
    }
}

 refresh.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>     </title>	
</head>
<body>
        !       
</body>
</html>

show.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>     </title>	
</head>
<body>
      ,      :${requestScope.book}
</body>
</html>

 struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.2.dtd">
<struts>
	<constant name="struts.custom.i18n.resources"
		value="messageResource"/>
	<constant name="struts.i18n.encoding" value="GBK"/>	
	<package name="js"  extends="struts-default" namespace="/09">		
		<!--     pro Action,     lee.ProAction -->
		<action name="pro" class="js.ProAction">
			<!--             -->
			<interceptor-ref name="defaultStack"/>
			<!--       token    -->
			<interceptor-ref name="token"/>
			<!--            ,         invalid.token -->
			<result name="invalid.token">/09/refresh.jsp</result>
			<!--         success,  /show.jsp     -->
			<result name="success">/09/show.jsp</result>
		</action>		
	</package>	
</struts>
 
 <s:a href="" onclick="newWin('09/s-token.jsp');" cssStyle="cursor: hand;">s-token.jsp</s:a>

messageResource_en_US.properties
book=Book Name

messageResource_zh_CN.propertiesまたはmessageResource_ja_JP.properties
book=  

 HTML
<input type="hidden" name="struts.token.name" value="struts.token" />
<input type="hidden" name="struts.token" value="2OHZFTNO4QPM3A58IE7TGCZEUMQWRRKY" />
 
6.12 updownselectラベル
以下のコードはすべて6.3に基づいています.
 
使用法はselectラベルによく似ています.このラベルで生成されたリストボックスが上下に移動できるのとは異なります.
list listKeylistValueをサポートし、●allowMoveUp:上へ移動ボタンを表示するかどうかをサポートします.デフォルトtrue●allowMoveDown:ダウンシフトボタンを表示するかどうか.デフォルトtrue●allowSelectAll:全選択ボタンを表示するかどうか、デフォルトtrue●moveUpLabel:上へ移動ボタンのテキストを設定、デフォルトˆ ●moveDownLabel:ダウンシフトボタンのテキストデフォルト設定ˇ ●selectAllLabel:全選択ボタンのテキストデフォルトを設定*
 
js.BookService.JAvaは前の例で既に
 
s-updownselect.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:updownselect               </title>
<s:head/>
</head>
<body>
<h3>  s:updownselect               </h3>
<s:form action="updownselectAction" method="post" theme="css_xhtml">
	<!--                        -->
	<s:updownselect name="a" label="         " labelposition="top"
		moveUpLabel="    " list="{'Struts 2    ' , '   Java EE      ','  Ajax  '}"/>
		
	<!--     Map                       emptyOption="true"       -->
	<s:updownselect name="b" label="           " labelposition="top"
		moveDownLabel="    "
		list="#{'Struts 2    ':'2007 10 ','   Java EE      ':'2007 4 ','  Ajax  ':'2007 6 '}"
		listKey="key"	emptyOption="true"		listValue="value"/>
		
	<s:bean name="js.BookService" id="bs"/>
	<!--         JavaBean                   -->
	<s:updownselect name="c" label="            " labelposition="top"
		selectAllLabel="    " multiple="true" list="#bs.books" listKey="author" listValue="name"/>
	 
	<hr/><s:submit align="left"></s:submit><hr/>
	<table border="1">
		<tr>
			<td><s:updownselect name="d" list="#request.list" selectAllLabel="  " moveDownLabel=" " moveUpLabel=" " /></td>
			<td><s:updownselect name="e" list="#request.map" selectAllLabel="  " moveDownLabel=" " moveUpLabel=" " listKey="key" listValue="value"/></td>
		</tr>
	</table>
</s:form>
</body>
</html>

 
UpdownselectAction
package js;
import java.util.*;
import com.opensymphony.xwork2.ActionSupport;

public class UpdownselectAction extends ActionSupport {

    private String a = "";
    private String b = "";
    private String c = "";
    private String d = "";
    private String e = "";
    private List<String> list = new  ArrayList<String>();
    private Map<String, String> map = new HashMap<String, String>();
 
    public String execute() throws Exception {
        System.out.println("a : " + a);
        System.out.println("b : " + b);
        System.out.println("c : " + c);
        System.out.println("d : " + d);
        System.out.println("e : " + e);
        list.add("a ");list.add("a ");list.add("a ");list.add("a ");list.add("a ");
        map.put("1", "a");map.put("2", "b");map.put("3", "c");map.put("4", "d");map.put("5", "e");
        return SUCCESS;
    }

    public String getA() {   return a;    }
    public void setA(String a) {    this.a = a;    }
    public String getB() {    return b;    }
    public void setB(String b) {    this.b = b;    }
    public String getC() {    return c;    }
    public void setC(String c) {   this.c = c;    }
    public String getD() {   return d;  }
    public void setD(String d) {  this.d = d;    }
    public String getE() {   return e;   }
    public void setE(String e) {   this.e = e;  }
    public List<String> getList() {   return list; }
    public void setList(List<String> list) {  this.list = list;  }
    public Map<String, String> getMap() {  return map; }
    public void setMap(Map<String, String> map) {   this.map = map; }   
}
 
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.2.dtd">
<struts>
	<constant name="struts.custom.i18n.resources"
		value="messageResource"/>
	<constant name="struts.i18n.encoding" value="GBK"/>	
	<package name="js"  extends="struts-default" namespace="/09">
		<action name="updownselectAction" class="js.UpdownselectAction">
			<result name="success">/09/s-updownselect.jsp</result>  
		</action>			
	</package>	
</struts>
 
<s:a href="" onclick="newWin('09/updownselectAction.action');" cssStyle="cursor: hand;">s-updownselect.jsp</s:a>
 
bug? フォームをコミットするとすべてのオプションがコミットされるようです
 
七、非フォームラベル
非フォームラベルは、tabページ、HTMLツリー構造の出力など、主にページ内の非フォームの可視化要素を生成するために使用されます.もちろんページ表示アクションに封入された情報も含まれています.非フォームラベルには主に以下のものがある:●actionerror:ActionのgetActionError()戻りがnullでない場合、その情報を出力する●actionmessage:ActionのgetActionMessage()戻りがnullでない場合、その情報を出力する●component:セカンダリラベルを使用してカスタムコンポーネントを生成することができます.●fielderror:Actionインスタンスにフォームドメインのタイプ変換エラー、検証エラーがある場合、このラベルはこれらのエラーを出力する責任を負う.fielderrorはタイプ変換、データ検証の部分で紹介されている.ここでは言わない.
 
7.1 actionerrorとactionmessageラベル
以下のコードはすべて6.3に基づいています.
この2つのラベルの使い方はまったく同じで、役割もほとんど同じです.Actionerror出力actionのgetActionError()、actionmessage出力actionのgetActionmessage()
 
DemoAction.java
package js;

import com.opensymphony.xwork2.ActionSupport;

public class DemoAction extends ActionSupport {
    public String execute() {
        //     Error  
        addActionError("       !");
        addActionError("       !");
        //         
        addActionMessage("       !");
        addActionMessage("       !");
        return SUCCESS;
    }
}

 
s-msg.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:actionerror s:actionmessage        </title>
	<s:head/>
</head>
<body>
<s:action name="demo" executeResult="true"/>
</body>
</html>

executeResult="true"表示の間にdemoActionの処理結果を本ページに含める
demo.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<s:actionerror/>
<s:actionmessage />
</body>
</html>

 struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.2.dtd">
<struts>
	<constant name="struts.custom.i18n.resources"
		value="messageResource"/>
	<constant name="struts.i18n.encoding" value="GBK"/>	
	<package name="js"  extends="struts-default" namespace="/09">
		<!--        Action -->
		<action name="demo" class="js.DemoAction">
			<result>/09/demo.jsp</result>
		</action>
	</package>	
</struts>
 
<s:a href="" onclick="newWin('09/s-msg.jsp');" cssStyle="cursor: hand;">s-msg.jsp</s:a>
 
7.2 componentラベル
以下のコードはすべて6.3に基づいています.
 
componentラベルは、カスタムビューコンポーネントを作成するために使用できます.属性:●theme:カスタムコンポーネントが使用するトピック、デフォルトxhtmlトピック●template Dir:カスタムコンポーネントのトピックディレクトリ、デフォルト使用システムのトピックディレクトリ、すなわちtemplateディレクトリ●template:カスタムコンポーネントが使用するテンプレートを指定
 
このほか、componentラベル内でparamサブラベルを使用することもできます.サブラベルは、ラベルテンプレートに追加のパラメータが入力されたことを示します.テンプレートでこのパラメータを取得する場合:$parameters.paramnameまたは$parameters['paramname']ヒント:カスタムテンプレートはFreeMarker、JSP、Velocityの3つの技術で書くことができます
s-component.jsp
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>  s:component  </title>
</head>
<body>
<h3>  s:component  </h3>
      (xhtml),      (template)<br/>  
  mytemplate.jsp      
<s:component template="mytemplate.jsp">
	<s:param name="list1" value="{'Struts2    ',	'   J2EE      ','  J2EE Ajax  '}"/>
</s:component>

<hr/>
       ,       <br/>  
  myAnotherTemplate.jsp      
<s:component	templateDir="myTemplateDir"	theme="myTheme"	template="myAnotherTemplate.jsp" >
	<s:param name="list" value="{'Struts 2    ',	'   Java EE      ' , '  Ajax  '}" />
</s:component>
</body>
</html>

 
/WebContent/template/xhtml/mytemplate.jsp
templateディレクトリはWEB-INFと同級
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<div style="background-color:#eeeeee;">
<b>JSP     <br>
         <br></b>
<s:select list="parameters.list1"/>
</div>
 
/WebContent/myTemplateDir/myTheme/myAnotherTemplate.jsp
myTemplateDirディレクトリはWEB-INFと同級
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<div style="background-color:#bbbbbb;">
JSP     <br>
         <br>
<select>
<s:iterator value="%{top.parameters.list}">
	<option><s:property/></option>
</s:iterator>
</select>
</div>

 
注意:Struts 2.0は、templateDir、themeプロパティを独自に定義しても、カスタムビューテンプレートでselectなどのUIを使用できます.struts 2.1ではできません.