Struts 2.0初体验-参考Tutorials写的登录页面

        越来越发现, 2.0比1.x方便了, 具体怎么方便, 看完你就知道了.呵呵.
        首先是欢迎页面, 这个页面没什么东西, 只是一个进入登录页面的链接而已.
        
<% @ taglib prefix="s" uri="/struts-tags"  %>
< html >
< head >
< title > Index </ title >
</ head >
< body >
    
< href ="<s:url action=" login!input"  /> ">Login </ a >< br  />
</ body >
</ html >

       看好了链接是怎么写的哦, 下面会做讲解的, 虽然action写的是login!input, 但其实进入的是login这个Action.呵呵, 为什么? 等写到下面一起说.
       接下来就是登录页面啦.
      
<% @ page contentType="text/html; charset=UTF-8"  %>
<% @ taglib prefix="s" uri="/struts-tags"  %>
< html >
< head >
< title > Login </ title >
</ head >
< body >
< s:form  action ="login" >
    
< s:textfield  label ="%{getText('username')}"  name ="username"   />
    
< s:password  label ="%{getText('password')}"  name ="password"   />
    
< s:submit  />
</ s:form >
</ body >
</ html >

    在这里面用了三个Struts的标签, 而且很好懂, 不做解释啦, 只不过要注意一下s:textfield和s:password里的label属性, 是个特殊的写法哦, 作用呢, 就是根据所传的参数做为Key, 到资源文件中取相应的内容.
        下面就是Action啦. 这个也很好懂的, 和上一篇的HelloWorld基本一样.
package  com.puras.struts2;

import  com.opensymphony.xwork2.ActionSupport;

public   class  Login  extends  ActionSupport  {
    
private String username;

    
private String password;

    
public String getPassword() {
        
return password;
    }


    
public void setPassword(String password) {
        
this.password = password;
    }


    
public String getUsername() {
        
return username;
    }


    
public void setUsername(String username) {
        
this.username = username;
    }

    
    
public String execute() throws Exception {
        
if (isInvalid(getUsername())) return INPUT;
        
if (isInvalid(getPassword())) return INPUT;
        
return SUCCESS;
    }


    
public boolean isInvalid(String value) {
        
return (value == null || value.length() == 0);
    }

}


别的没什么好说的, 只提一下Execute方法内的两个不同的反回值, 在HelloWorld里面, Struts的配置文件中的Action的返回页面, 只是用了一个默认的值, 也就是SUCCESS代表的返回值, 在这个里面多了一个INPUT, 类似于1.x配置文件里的input, 只不过在2.0里单拿出来了. 其实加上了Validator验证之后, 这一步就是多余的了, 你可以在不加Validator的情况下, 看看这样返回会是什么样子.
        下面就是struts.xml的配置啦.
< action  name ="login!*"  method ="{1}"  class ="com.puras.struts2.Login" >
            
< result  type ="redirect-action" > menu </ result >
            
< result  name ="input" > /login.jsp </ result >
        
</ action >

这里定义了两个result, 当在Action的返回SUCCESS的时候, 会走默认的result, 也就是上面的 < result  type ="redirect-action" > menu </ result >, 注意里面的type, 是来设置跳转的类型的, 设置为Redirect, 在跳转之后, 浏览器上会显示跳转之后的地址, 否则还会显示当前的地址.我想Redirect和Forward的区别, 大家应该都很清楚了. 里面的menu, 用的是下面特殊的Action定义的, 转到了menu.jsp页面.
这个Action的定义, 也和HelloWorld里不太一样哦.还记得上面的链接地址吧? 它是怎么工作的呢? 其实是这样的.
首先框架会先寻找login!*这个Action, 之后把method="{1}"替换成"method=input", 框架会调用Login这个Action中的input方法, 而input方法是一个特殊的方法, 在执行这个方法的时候, 框架是不会去执行验证的, 默认的input方法会返回一个INPUT, 指向我们定义的result, 这样在显示JSP页面的时候, 就不会带上错误消息了, 否则第一次见到页面, 上面就有错误提示, 会让人感觉很别扭. (英文太烂, 只能理解到这程度了, 有什么问题希望给指出, 先谢谢撒!)

       在这里还要提一个特殊的Action:

< action  name ="*" >
            
<result>/{1}.jsp</result>
        
</action>

用这样的配置, 当你输入一个地址, 比如是:Welcome.action的时候, 首先他会到struts.xml里面去找有没有Welcome这个Action, 没有的话就匹配上这个*的了, 会把我们输入的Action地址做为一个参数, 传给/{1}.jsp, 这样得到的结果就是Welcome.jsp啦.呵呵, 是不是很好用呢? 不过要把它放在最后, 否则会有问题, 你可以试试着, 把它放在Login的Action的上面, 看看会有什么问题.呵.

接下来就是验证文件啦, 跟1.x相似, 还是在XML文件里面写, 但是还有区别, 在这里针对Login的验证可以在Action的类文件的相同目录, 定义一个以类名开头+"-validation.xml", 这样就不会把一堆验证扔到一起了, 可以单独拿来写.

<! DOCTYPE validators PUBLIC 
"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
>

< validators >
    
< field  name ="username" >
        
< field-validator  type ="requiredstring" >
            
< message  key ="requiredstring"   />
        
</ field-validator >
    
</ field >
    
    
< field  name ="password" >
        
< field-validator  type ="requiredstring" >
            
< message  key ="requiredstring"   />
        
</ field-validator >
    
</ field >
</ validators >

在这里的Message都是写的资源文件里面的Key值, 下面就是资源文件的定义, 跟1.x里是一样的.

requiredstring=${getText(fieldName)} is required!
username = User Name
password = Password

可以直接用 ${getText(fieldName)}方法, 从资源文件中取其他的内容, 很方便不是嘛?

但是如果是通过匹配 * 这个Action跟转的页面, 是没法来读取资源文件的, 至少我现在还不会.呵呵.
但是可以改一下那个Action的定义.
改成:

< action  name ="*"  class ="com.puras.struts2.ExampleSupport" >
            
< result > /{1}.jsp </ result >
        
</ action >

给它加了一个Class, 这个Class随便写一个空的类就可以了.

package  com.puras.struts2;

import  com.opensymphony.xwork2.ActionSupport;

public   class  ExampleSupport  extends  ActionSupport  {

}


这样.就可以在menu.jsp页面里引用资源文件啦.

<% @ page contentType="text/html; charset=UTF-8"  %>
<% @ taglib prefix="s" uri="/struts-tags"  %>

< html >
< head >
< title > The First Struts 2.0 Example </ title >
</ head >
< body >
    
< h2 >< s:text  name ="Menu.message"   /></ h2 >
</ body >
</ html >


        现在最后一个页面也完成了, 把Tomcat启动起来,  看看我们的成果吧!!!
      
       感觉用起来还是蛮舒服的. 呵呵.继续~~~

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值