文章摘要
1、Struts 2 url標(biāo)簽
2哥谷、Struts 2表單標(biāo)簽
3岸夯、Struts 2屬性標(biāo)簽
英文文獻(xiàn)請點(diǎn)擊此處~
在Hello World中,我們添加了一個(gè)Struts 2 url標(biāo)簽index.jsp
來創(chuàng)建一個(gè)超鏈接hello.action们妥。
<body>
<h1>Welcome To Struts 2!</h1>
<p><a href="<s:url action='hello'/>">Hello World</a></p>
</body>
要在視圖頁面上使用Struts 2標(biāo)簽猜扮,您必須包含一個(gè)標(biāo)簽庫指令。通常监婶,taglib偽指令是<%@ taglib prefix="s" uri="/struts-tags" %\>
旅赢。所以所有Struts 2標(biāo)簽的前綴將為“s”。如果要實(shí)際讀取Struts 2標(biāo)簽TLD文件惑惶,您可以在Struts 2核心jar的“META-INF”文件夾中找到它煮盼。
接下來,我們在Hello World的基礎(chǔ)上带污,增加標(biāo)簽的使用案例僵控。
一、Struts 2 url標(biāo)簽
Struts 2標(biāo)簽的一個(gè)用途是創(chuàng)建到其他Web資源的鏈接鱼冀,特別是本地應(yīng)用程序中的其他資源报破。
雖然HTML為創(chuàng)建超鏈接提供了一個(gè)簡單的標(biāo)簽悠就,但HTML標(biāo)簽通常需要我們包含重復(fù)、冗余信息充易。HTML標(biāo)簽也不容易訪問框架提供的動(dòng)態(tài)數(shù)據(jù)梗脾。
- 1、Web應(yīng)用程序中非常常見的用例是鏈接到其他頁面盹靴。
在Hello World中藐唠,我們hello.action在index.jsp使用Struts 2的URL標(biāo)簽內(nèi)添加了一個(gè)鏈接。
<p><a href="<s:url action='hello'/>">Hello World</a></p>
- 2鹉究、使用標(biāo)簽,添加參數(shù)s:param踪宠。
<s:url action="hello" var="helloLink">
<s:param name="userName">Bruce Phillips</s:param>
</s:url>
<p><a href="${helloLink}">Hello Bruce Phillips</a></p>
二自赔、Struts 2表單標(biāo)簽
大多數(shù)應(yīng)用程序?qū)⑹褂枚鄠€(gè)數(shù)據(jù)輸入表單。Struts 2標(biāo)簽使得創(chuàng)建輸入表單變得容易柳琢。
每個(gè)Struts 2表單標(biāo)簽都有許多屬性來模擬正常的HTML表單標(biāo)簽屬性绍妨。
要?jiǎng)?chuàng)建窗體的外殼,請使用Struts 2表單標(biāo)簽柬脸。action屬性設(shè)置要提交的操作名稱他去。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Basic Struts 2 Application - Welcome</title>
</head>
<body>
<h1>Welcome To Struts 2!</h1>
<p>Get your own personal hello by filling out and submitting this form.</p>
<s:form action="hello">
<s:textfield name="userName" label="Your name" />
<s:submit value="Submit" />
</s:form>
</body>
</html>
表單標(biāo)簽,在瀏覽時(shí)倒堕,瀏覽頁面:
頁面中的struts 標(biāo)簽灾测,會(huì)轉(zhuǎn)化為html:
<form id="hello" name="hello" action="/using-tags/hello.action;jsessionid=6233ot11na1mtshbr292hu1w" method="post">
<table class="wwFormTable">
<tr>
<td class="tdLabel"><label for="hello_userName" class="label">Your name:</label></td>
<td class="tdInput"><input type="text" name="userName" value="" id="hello_userName"/></td>
</tr>
<tr>
<td colspan="2">
<div class="formButton">
<input type="submit" value="Submit" id="hello_0"/>
</div>
</td>
</tr>
</table>
</form>
三、Struts 2屬性標(biāo)簽
- 1垦巴、屬性標(biāo)簽:
<s:property value="messageStore.message" />
屬性標(biāo)簽最常見的用法是通過調(diào)用公共get方法(Action類)“獲取”返回的值媳搪,然后將該值包含在返回給瀏覽器的HTML中。
如Hello World教程中所討論的骤宣,messageStore.message指示Struts 2首先調(diào)用getMessageStore Action類的方法的值秦爆。該方法調(diào)用返回一個(gè)MessageStore對象。該.message部分指示Struts 2調(diào)用MessageStore對象的getMessage方法憔披。該getMessage方法返回一個(gè)String等限,該字符串將包含在返回給瀏覽器的HTML中。
Struts 2屬性標(biāo)簽的一個(gè)非常有用的功能是它會(huì)自動(dòng)將最常見的數(shù)據(jù)類型(int芬膝,double望门,boolean)轉(zhuǎn)換為其等效字符串。為了演示此功能锰霜,我們將一個(gè)靜態(tài)int變量添加到類中HelloWorldAction怒允。
HelloWorldAction.java
package wanghailu.apache.struts.action;
import com.opensymphony.xwork2.ActionSupport;
import wanghailu.apache.struts.model.MessageStore;
public class HelloWorldAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private MessageStore messageStore;
private static int helloCount = 0;
public int getHelloCount() {
return helloCount;
}
public String execute() throws Exception {
messageStore = new MessageStore() ;
helloCount++;
return SUCCESS;
}
public MessageStore getMessageStore() {
return messageStore;
}
}
每次調(diào)用execute方法時(shí),我們將增加helloCount1.所以將這個(gè)代碼添加到類的execute方法中HelloWorldAction.
每當(dāng)用戶單擊頁面index.jsp上的鏈接之一(或提交表單)時(shí)锈遥,將運(yùn)行execute類的方法纫事,HelloWorldAction并將靜態(tài)字段helloCount增加1勘畔。
要包含helloCount屬性的值,HelloWorld.jsp我們可以使用Struts 2屬性標(biāo)記丽惶。
- 2炫七、使用屬性標(biāo)簽顯示helloCount值:
<p>I've said hello <s:property value="helloCount" /> times!</p>
所以即使該getHelloCount方法返回一個(gè)整數(shù)類型,Struts 2將其轉(zhuǎn)換為String類型并將其放入p標(biāo)簽的正文中钾唬。
請注意万哪,即使helloCount是靜態(tài)字段,get方法helloCount也不是靜態(tài)的抡秆。對于Struts 2調(diào)用getHelloCount方法來獲取值helloCount奕巍,該getHelloCount方法不能是靜態(tài)的。
如果get方法返回的值是一個(gè)對象儒士,那么屬性標(biāo)簽將導(dǎo)致Struts 2調(diào)用該對象的toString方法的止。當(dāng)然,您應(yīng)該始終toString在模型類中覆蓋Class Object的方法着撩。將以下toString方法添加到MessageStore類中:
public String toString() {
return message + " (from toString)";
}
- 3诅福、使用屬性調(diào)用toString:
<p><s:property value="messageStore" /></p>
由于getMessageStore的HelloWorldAction類返回MessageStore對象,搭片2將調(diào)用toString類的方法MessageStore拖叙。該toString方法返回的字符串將顯示在瀏覽器中氓润。