Struts2.0标签用法 (对比 Struts1.0标签)

 

转载: http://blog.csdn.net/zgmzyr/article/details/5588792

 

 

 

Struts2.0标签

注意OGNL表达式的配合使用

 

1、设置属性s:set

功能与Struts1.2的bean:define相同

(1)复制属性

<%

request.setAttribute("mldn","lin");

%>

<s:set name="temp" value="#request.mldn"></s:set>

${temp }

注意#

value中需要使用OGNL表达式来取得属性范围中的属性值,如果属性值保存在4种属性范围中,需要通过 #范围名称.属性来取得,如果要取得该属性下的某一个属性值,可以继续使用 “. ”的方式

 

(2)新建属性

<s:set name="temp1" value="'mumu'"></s:set>

${temp1 }

value中只能是基本数据类型:int、String等

 

s:set标签还有scope属性用来保存所设置或复制的属性的属性范围,如果不进行手工配置,默认保存在page范围内。

 

2、显示属性s:property

功能与bean:write类似,但不能格式化数据

<%

request.setAttribute("mldn","yan");

%>

<s:property value="#request.mldn" default="cly"/>

可以通过default设置该属性为null时的默认值,注意OGNL的使用

 

注意:当使用Struts2.0的Action中的getter 方法传递数据时,可以不加入#属性范围

<%@ page language="java" pageEncoding="GBK"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>登陆成功页</title>

</head>

 

<body>

<br>

<a href="login!quit.action">退出登录</a>

<center>

<br>

欢迎<s:property value="userid"/>登陆成功!

 

</center>

</body>

</html>

 

3、格式化显示日期s:date

与bean:write中格式化日期的功能相同

<s:date name="user.birthday" format="yyyy年MM月dd日"/>

 

4、判断标签s:if…s:elseif…s:else

<s:if test="user == null">

为空

</s:if>

<s:elseif test="user.userid == 'MLDN'">

符合条件

</s:elseif>

<s:else>

不符合条件

</s:else>

在test中如果要使用非getter方法设置的属性,也需要OGNL语法的支持,如果不加引号,表示使用属性,加入’’表示按照字符串处理,test中的返回值必须为boolean

 

5、迭代s:iterator

(1)集合(元素为对象)

循环数组或集合数据

<s:iterator value="all">

${userid } -- ${age } -- ${birthday } <br>

</s:iterator>

在使用Struts2.0的迭代标签时,不需要使用id定义临时的属性,Struts2.0会将循环的pojo对象的所有属性保存在page范围内,可以直接通过属性名显示该属性(EL)

 

(2)集合(元素为基本数据类型)

当集合中保存的属性并不是一个pojo对象,而是一个基本类型时(String)

<s:iterator value="all">

<s:property/> <br>

</s:iterator>

这里可以使用s:property将集合中的内容直接显示出来。

 

(3)Map对象

如果使用的为Map类型

<!-- value表示要迭代的属性(OGNL) -->

<s:iterator value="all">

${key } -- ${value } <br>

</s:iterator>

 

(4)迭代索引

如果要完成单双行变色,在Struts1.2中使用indexId进行处理,在struts2中可以通过status进行处理

使用status可以通过以下属性取得数据:

status.index,取得索引号:从0开始

status.count:取得当前循环次数:从1开始

status.odd:判断当前是否为单数行,如果是,则返回true,否则返回false

status.even:判断是否为双数行

status.first:判断是否为循环的第一行

status.last:判断是否为循环的最后一行

<!-- value表示要迭代的属性(OGNL) -->

<s:iterator value="all" status="status">

<font color="${status.odd?"red":"green" }"> ${key } -- ${value }</font> <br>

</s:iterator>

 

五、Struts2.0国际化处理

Struts2.0中通过s:i18n和s:text来完成国际化功能

注意:

(1)一种语言得建立一个资源文件。

(2)页面信息的资源文件可以建立在src下,命名为***_语言名称_区域名称.properties

 

文件名可以自行定义,但这几个不同语言版本的资源文件的名称必须一致

 

范例:单个页面的国际化处理

说明:每个页面的国际化处理,涉及到拦截器

修改项目:LinStrutsTwoDemo的首页,采用国际化处理

 

1、建立不同语言的资源文件

这里就叫“message_en_US.properties”和“message_zh _CN.properties”,在src下

文件message_en_US.properties:

msg.index.page.title=Index

msg.index.page.userid=UserID

msg.index.page.password=Password

msg.index.page.submit=Login

msg.index.page.reset=Reset

msg.index.page.selectLanguage=Please select language

msg.index.page.chinese=Chinese

msg.index.page.english=English

 

文件message_zh _CN.properties:

msg.index.page.title=/u9996/u9875

msg.index.page.userid=/u7528/u6237ID

msg.index.page.password=/u5bc6 /u7801

msg.index.page.submit=/u767b/u5f55

msg.index.page.reset=/u91cd/u7f6e

msg.index.page.selectLanguage=/u8bf7/u9009/u62e9/u663e/u793a/u8bed/u8a00

msg.index.page.chinese=/u4e2d/u6587

msg.index.page.english=/u82f1/u8bed

2、编写国际化页面

<%@ page language="java" pageEncoding="GBK"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<s:i18n name="message">

<head>

<title><s:text name="msg.index.page.title"/></title>

<script type="text/javascript">

function changeLanguage(locale) {

window.location = "login!changeLanguage.action?mylocale="+locale ;

}

</script>

 

</head>

 

<body>

<table width="95%" border="0" cellspacing="0" cellpadding="0">

<tr><td align="right">

<s:text name="msg.index.page.selectLanguage"></s:text>:<select name="loc" onchange="changeLanguage(this.value);">

<option value="zh_CN"><s:text name="msg.index.page.chinese" /></option>

<option value="en_US" ${mylocale=="en_US"?"selected":"" }><s:text name="msg.index.page.english" /></option> </select>

</td></tr>

</table>

<center><s:fielderror></s:fielderror>

<form action="login!login.action" method="post">

<s:text name="msg.index.page.userid"/>:<input type="text" name="userid" ><br />

<s:text name="msg.index.page.password"/>:<input type="password" name="password" ><br /><br />

<input type="submit" value="<s:text name="msg.index.page.submit"/>">&nbsp;&nbsp;&nbsp;&nbsp;

<input type="reset" value="<s:text name="msg.index.page.reset"/>">

</form>

</center>

</body>

 

</s:i18n>

</html>

 

 

3、编写Action

增加一个属性(用来接收用户选择的语言)和方法(改变语言环境)

package mldn.lin.struts.action;

 

import java.util.Locale;

 

import mldn.lin.pojo.User;

 

import org.apache.struts2.ServletActionContext;

 

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

 

public class LoginAction extends ActionSupport implements ModelDriven {

 

private User user = new User();

 

private String mylocale;

 

public void setMylocale(String mylocale) {

this.mylocale = mylocale;

}

 

public Object getModel() {

// TODO Auto-generated method stub

return user;

}

 

// 覆写validateLogin方法,实现登陆时表单验证

public void validateLogin() {

if (this.user.getUserid() == null

|| this.user.getUserid().trim().equals("")) {

this.addFieldError("userid", this.getText("userid.null"));

}

if (this.user.getPassword() == null

|| this.user.getPassword().trim().equals("")) {

this.addFieldError("password", this.getText("password.null"));

}

}

 

// 编写login方法

public String login() throws Exception {

if (this.user.getUserid().equals("mldn")

&& this.user.getPassword().equals("123")) {

return "suc";

else {

this.addFieldError("loginFail", this.getText("loginFail.err"));

return "input";

}

}

 

// 编写quit方法

public String quit() throws Exception {

ServletActionContext.getRequest().getSession().invalidate();

return "input";

}

 

public String changeLanguage()throws Exception{

String[] lan = mylocale.split("_");

Locale loc = new Locale(lan[0], lan[1]);

 

// 将使用的语言设置到Struts2.0

ServletActionContext.getContext().setLocale(loc);

return "input";

}

 

public User getUser() {

return user;

}

 

public String getMylocale() {

return mylocale;

}

}

 

 

六、Struts2结合JFreeChart开发

 

<package name="struts-default">

<result-types>

<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>

<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>

<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>

<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>

<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>

<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>

<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>

<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>

<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>

<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />

<!-- Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->

<result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>

<result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />

</result-types>

你可能感兴趣的:(struts2)