zoukankan      html  css  js  c++  java
  • struts2中运用通配符(边学边记)

    struts2中通配符的使用,是在配置<ation.../>元素时,需要制定name、class和method属性,其中name属性可支持通配符,然后可以在class,method属性中使用表达式。这种使用通配符的方式形式上是一种动态方法调用。在配置Action时,可在action元素的name属性中使用星号(*)来匹配任意的字符串,表示0或多个字符串;同时method属性使用表达式{1}来一一对应。

    下面是在实现用户登录和注册时的简要代码:

    package com.jbit.action;

    import com.opensymphony.xwork2.ActionSupport;

    public class UserAction extends ActionSupport{

    private static final long serialVersionUID = 1L;

    private String uname;
    private String rname;
    public String getRname() {
    return rname;
    }
    public void setRname(String rname) {
    this.rname = rname;
    }
    public String getUname() {
    return uname;
    }
    public void setUname(String uname) {
    this.uname = uname;
    }
    //用户登录
    @SuppressWarnings("unused")
    public String login(){
    System.out.println("进入登录method");
    System.out.println(this.uname+"登录名");
    if(!uname.equals("")){
    return SUCCESS;
    }else if(uname.equals("")){
    return INPUT;
    }else{
    return ERROR;
    }


    }

    //用户注册
    @SuppressWarnings("unused")
    public String register(){
    if(!rname.equals("")){
    return SUCCESS;
    }else if(rname.equals("")){
    return INPUT;
    }else{
    return ERROR;
    }


    }

    }

    其中struts.xml中的配置如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">

    <struts>

    <constant name="struts.devMode" value="true" />

    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="default" namespace="/" extends="struts-default">

    <action name="*User" class="com.jbit.action.UserAction" method="{1}">

       <result name="success">/page/{1}_success.jsp</result>
       <result name="input">/page/{1}User.jsp</result>
       <result name="error">/page/error.jsp</result>
    </action>
    </package>

    </struts>

    在Action中如果不慎把方法定义为private ,外部也是无法调用的。同时多个不同action和不同方法如下面列子:

    当然,这里只有一个"*".你可以有两个,甚至三个四个..比如这样写 *_* 这样就是两个"*" .那么我们也可以用{1},{2}来分别的表示他们.

    (2) 对应的action 内容

    package com.test.action;

    import com.opensymphony.xwork2.ActionSupport;

    @SuppressWarnings("serial")
    public class UserAction extends ActionSupport
    {
    public String add()
    {
    return SUCCESS;
    }
    public String delete()
    {
    return SUCCESS;
    }
    public String update()
    {
    return SUCCESS;
    }
    public String select()
    {
    return SUCCESS;
    }
    }

    如struts中配有如下几个action,ManagerUserAction中有与之对应的方法
    <actionname="addUser"class="com.netshuai.action.ManagerUserAction"method="add">
    <resultname="success">/addUser.jsp</result>
    </action>
    <actionname="delUser"class="com.netshuai.action.ManagerUserAction"method="del">
    <resultname="success">/delUser.jsp</result>
    </action>
    <actionname="updateUser"class="com.netshuai.action.ManagerUserAction"method="update">
    <resultname="success">/updateUser.jsp</result>
    </action>

    如果使用通配符,可以省略写成一个action

    <actionname="*User"class="com.netshuai.action.ManagerUserAction"method="{1}">
    <resultname="success">/{1}User.jsp</result>
    </action>

    其中,*为通配符,{1}为*所替换的内容,如用户访问的是addUser.action,则*就被自动替换为add,{1}处也自动使用add替换。 若开发时使用统一的命名规范,则所有action可使用类似如下的一条替换即可

    <actionname="*_*"class="com.netshuai.action.{1}Action"method="{2}">
    <resultname="success">/{2}_{1}Success.jsp</result>
    </action>

    如上所示,所有文件都采用统一的命名规范,第一个*为分类名称,第二个*为操作名,{1}和{2}分别代表第一个和第二个*的替换值,所有action实现类都命名为分类名称+Action。
    如分类名称为User,操作名为add,则访问的action名为User_add.action,action实现类名为UserAction,返回页面的名为add_UserSuccess.jsp
    另:{0}代表显示所有通配符内容,如<resultname="success">/{2}_{1}Success.jsp</result>改为<resultname="success">/{0}Success.jsp</result>,则返回的名为User_addSuccess.jsp

  • 相关阅读:
    文章预告的自我挖坑系列——时尚与深度学习
    文章预告的自我挖坑系列——D3.js 系列之星光闪烁
    时尚与深度学习系列:Fashion forward: Forecasting visual style in fashion
    D3.JS V4 绘制中国地图
    mysql 数据库电脑间迁移
    (QA-LSTM)自然语言处理:智能问答 IBM 保险QA QA-LSTM 实现笔记.md
    博客园里输入latex公式
    理解pytorch中的softmax中的dim参数
    numpy中的广播
    美团餐饮娱乐知识图谱——美团大脑揭秘
  • 原文地址:https://www.cnblogs.com/cmdl/p/2947897.html
Copyright © 2011-2022 走看看