Struts入门(二)
昨天写了一个小案例,里面的RegisterAction有一个转发的动作,但是我们把转发的路径写死了,这样不好,我们其实只要在struts的配置文件struts-config.xml的RegisterAction节点下添加<forward name="message" path="/message.jsp"></forward>,也就是写了个映射关系,以后我们只需要修改配置文件就能实现修改。
我们以后写的时候都可以不用写死了,所有的都可以在stucts的配置文件里面配置,就拿跳转为例,我们使用stucts提供的html标签库,
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
导入标签库之后就能用HTML:link标签了。
<html:link action="/RegisterUI">注册</html:link>
这里的RegisterUI是需要在在stucts里面配置
<action path="/RegisterUI" forward="/WEB-INF/jsp/register.jsp"></action>
这样子写是不是很方便。
Html:link标签三大好处:
不用写web应用的名称。传统的需要这么写
<a href="${pageContext.request.contextPath}/RegisterUI.do">注册</a>
第二个好处,不用写.do了,stucts已经处理好了。
<html:link action="/RegisterUI">注册</html:link>
自动对请求的参数和url编码
关于stucts的表单校验
Stucts默认是自动帮助我们写好表单校验的,自动调用里面的validate方法
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub return super.validate(mapping, request); }
如果返回值为空,代表校验成功,不为空则失败。如果想自己写只需override这个方法,如果不需要自动表单校验,只要在配置文件中把validate置为false(默认true)
<action path="/Register" type="larson.web.action.RegisterAction" name="UserFormBean" validate="true">
现在我们来写表单校验
我们往里面添加数据,struts也能帮助我们做好了一些工作,stucts给我们提供了MessageResources,因为struts在写的时候为了适应国际化,要求我们写一个resource资源文件,所以我们需要在larson.resource包下写一个资源文件,我这写了个prompt.username,对应的值是“用户名不能为空”,通过以下这种方法就能获取到消息,存在了request域。
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if(this.username==null || this.username.trim().equals("")){ MessageResources mr = MessageResources.getMessageResources("larson.resource.MessageResource"); errors.add("username", new ActionMessage("errors.required",mr.getMessage("prompt.username"))); } return errors; }
接下来就需要在注册的表单页面取到这个错误消息,很简单,一行代码,前提是导入html标签库:
<html:errors property="username"/>