【Struts2】(11)异常处理和标签

10 篇文章 0 订阅

一. 异常处理

1. 局部异常处理

在之前的ValidatorAction.java中修改execute方法:
	public String execute() {
		if (!"Jerry".equals(username)) {
			throw new RuntimeException("用户名不正确");
		}
		return SUCCESS;
	}
这里当用户名不为Jerry的时候抛出一个异常,然后在struts配置文件中action添加以下标签:
		<action name="validator" class="com.thr.struts2.action.ValidatorAction">
			<result>/success.jsp</result>
			<result name="error">/error.jsp</result>
			<exception-mapping result="error"
				exception="java.lang.RuntimeException"></exception-mapping>
		</action>
这个意思就是说当出现RuntimeException的时候,页面就乎你自动跳转到result结果集为input的jspo页面,这里配置的是当前result的结果集,也可以配置全局的结果集。
在error.jsp中这样子写:
<body>
	<s:actionerror />
	<pre>
		<s:property value="exception.message" />
		<s:property value="exception.stackTrace" />
	</pre>

</body>
就可以获取到错误信息了,因为这里处在栈顶的是exception异常,使用getMessage和getStrackTrace就可以获取相关信息。

2. 全局异常处理

当把异常处理的映射配置到全局,在<global-results>之后就可以处理全局的异常:
		<global-results>
			<result name="login">/login.jsp?id=%{#loginid}</result>
			<result name="input">/error.jsp</result>
		</global-results>
		<global-exception-mappings>
			<exception-mapping result="input"
				exception="java.lang.RuntimeException"></exception-mapping>
		</global-exception-mappings>
这样子配置,不管是哪个Action,只要出现RuntimeException或者是继承自RuntimeException的异常都会跳转至error.jsp页面。

二. Struts标签

1. if ... else ...

创建Action:
public class TagTestAction {

	public String execute() {
		List list = new ArrayList();
		for (int i = 0; i < 10; i++) {
			list.add("成员" + i);
		}
		ActionContext.getContext().put("list", list);
		return "success";
	}
}
添加几个元素进List,然后jsp页面中这样使用标签:
	<s:if test="!#list.empty">
		<s:iterator value="#list" status="i">
			<s:property value="#i.index" />,<s:property />
			<br />
		</s:iterator>
	</s:if>
	<s:else>
	数据为空
	</s:else>

2. 迭代器

修改Action类:
	private List myList1;
	private List myList2;
	private List myList3;

	public List getMyList1() {
		return myList1;
	}

	public List getMyList2() {
		return myList2;
	}

	public List getMyList3() {
		return myList3;
	}

	public String execute() {
		myList1 = new ArrayList();
		myList1.add("1");
		myList1.add("2");
		myList1.add("3");

		myList2 = new ArrayList();
		myList2.add("a");
		myList2.add("b");
		myList2.add("c");

		myList3 = new ArrayList();
		myList3.add("A");
		myList3.add("B");
		myList3.add("C");
		return "success";
	}
jsp页面中这样子使用:
	<s:append var="allList">
		<s:param value="myList1" />
		<s:param value="myList2" />
		<s:param value="myList3" />
	</s:append>
	<s:iterator value="#allList">
		<s:property />
	</s:iterator>

3. 根据字符串创建集合

	<s:generator val="'a, b, c'" separator=",">
		<s:iterator>
			<s:property /><br />
		</s:iterator>
	</s:generator>

三. UI标签

	用户表单<br />
	<s:form namespace="/test" action="from" method="post">
		<s:hidden name="method:add"/>
		<s:textfield name="username" label="用户名" />
		<s:password name="password" label="密码" />
		<s:textfield name="age" label="年龄"/>
		<s:submit value="提交"/>
	</s:form>
生成的表单自带换行,而且是对整齐的。

四. Freemarker模板

要想修改struts的默认模板,我们添加这样一个自己的常量:
	<constant name="struts.ui.theme" value="thr" />
然后在src下创建包:template.thr
将struts-2.3.24.1\src\core\src\main\resources\template\xhtml目录下的ftl文件全部考到这个包内,修改里面的ftl文件即可。
要想使用struts自带的模板,只需要修改常量struts.ui.theme的值就行了。常用的还有simple、css_xhtml等。
还可以单独对某一个控件进行主题的设置,只需要加入theme="css_xhtml"即可,例如:
		<s:password name="password" label="密码" theme="css_xhtml"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值