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

来源:互联网 发布:java下载doc文件 编辑:程序博客网 时间:2024/05/16 06:42
        越来越发现, 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启动起来,  看看我们的成果吧!!!
      
       感觉用起来还是蛮舒服的. 呵呵.继续~~~

 
原创粉丝点击