美文网首页
struts2 笔记3

struts2 笔记3

作者: 持续进步者 | 来源:发表于2017-01-06 14:18 被阅读4次

    输入校验

    validate,validatexxx

    • 使用addFieldError(fieldName,errorMessage)方法存入字段的错误信息。
    • 使用addActionError(aanErrorMessage)方法中存入action的错误信息。
    • 使用addActionMessage(aMessage)方法存入action提示消息。
    • 使用<s:filederror filedName="xxxx"/>取出字段的错误消息。
    • 使用<s:actionerror />取出action的错误消息。
    • 使用<s:actionmessage />取出action提示消息。
    • 使用struts2 提供的表单标签会自动显示字段的错误消息。

    OGNL表达式

    什么是OGNL语言

    OGNL的全称为Object Graphic Navigation Language(对象图导航语言)。它是Struts2的默认表达式语言!
    使用OGNL需要导入OGNL的Jar包:ognl-3.0.5.jar
    

    OGNL 的功能介绍

    • EL 一样的javaBean导航
    • 调用对象方法
    • 调用静态方法
    • 索引数组元素
    • 操作集合
    取值语法
    public static Object getValue(@NotNull String expression,
                                        Map context,
                                        Object root)
                                throws ognl.OgnlException
    
    • expression ongl表达式。
    • context(map) 上下文。
    • root(list/map/bean) root 根
    从root根 bean 中取值
    User u1 = new User();
    u1.setUsername("tom");
    String username = (String) Ognl.getValue("username", new HashMap(), u1);
    System.out.println(username);
    ----------------
    输出:tom
    
    从root根 list 中取值 "[第几个].属性"
    ArrayList<User> list = new ArrayList<User>();
    User u1 = new User();
    u1.setUsername("tom
    User u2 = new User();
    u2.setUsername("jerry
    list.add(u1);
    list.add(u2)
    String username = (String) Ognl.getValue("[1].username", new HashMap(), list);
    System.out.println(username);
    ----------------
    输出:jerry
    
    从root根引用值中取值 “引用属性.属性”
    User user = new User();
    user.setUsername("user");
    
    Address address = new Address();
    address.setCity("北京");
    
    user.setAddress(address);
    
    String city = (String) Ognl.getValue("address.city", new HashMap(), user);
    
    System.out.println("city : " + city);
    ----------------
    输出: city : 北京
    
    从context上下文中取值"#属性名称"
    Map<String, Object> context = new HashMap<String, Object>();
    context.put("username", "context");
    User user = new User();
    user.setUsername("user");
    //# 表示取值 context
    String mapUsername = (String) Ognl.getValue("#username", context, user);
    String rootUsername = (String) Ognl.getValue("username", context, user);
    System.out.println("mapUsername = " + mapUsername+"\t"+"rootUsername="+rootUsername);
    ----------------
    输出:mapUsername = context    rootUsername=user
    
    给root根属性赋值
    User user = new User();
    Ognl.getValue("username='tom'", new HashMap(), user);
    System.out.println("username : " + user.getUsername());
    ----------------
    输出:username : tom
    
    User user = new User();
    Ognl.setValue("username", new HashMap(), user, "jerry");
    System.out.println(user.getUsername());
    ----------------
    输出:jerry
    
    User user = new User();
    Ognl.getValue("setUsername('jack')", new HashMap(), user);
    System.out.println(user.getUsername());
    ----------------
    输出:jack
    
    获取静态值 “@全限定名@静态方法”
    String time = (String) Ognl.getValue("@cn.structs.k_orgl.DateUtils@getTime()", new HashMap(), new Object());
    System.out.println("time = " + time);
    ----------------
    输出:time = 2016-12-28 14:43:10
    
    数学运算
    int result = (int) Ognl.getValue("1+1", new HashMap(), new Object());
    System.out.println("result =" + result);
    ----------------
    输出:result =2
    
    创建list对象
    List list = (List) Ognl.getValue("{'tom','jerry','jack','rose'}", new HashMap(), new    Object());
    System.out.println(list);
    ----------------
    输出:[tom, jerry, jack, rose]
    
    创建map对象
    Map map = (Map) Ognl.getValue("#{'name':'tom','age':'18'}",new HashMap(),new Object());
    System.out.println(map);
    ----------------
    输出:{name=tom, age=18}
    

    OGNL 与 Struts2 的结合

    Struts2中OGNL操作的上下文和根对象

    • 上下文对象是ActionContext.
    • 根对象是ValueStack,它是一个栈结构,提供了压栈和谈栈等方法,通常栈顶元素是
      当前方法的Action对象。
    • 每个请求都有自己的ActionContext,每个ActionContext中都有自己的ValueStack。

    Struts2中的上下文对象就是ActionContext,而根对象是ValueStact对象。但
    struts2中根对象ValueStack很特殊,他不是一个对象,而是一组对象(底层是ArrayList的栈结构)。
    可以通过ActionContext来获取ValueStack:ActionContext.getContext().getValueStack();
    也可以从request中获取ValueStack:request.getAttribute("struts.valueStack").

    ActionContext 内部的数据:
    • parameters:Map类型,对应HttpServletRequest中的请求参数;
    • request:Map类型,对应HttpServletRequest中的属性;
    • session:Map类型,对应HttpSession中的属性;
    • application:Map类型,对应ServletContext中的属性;
    • attr:Map类型,对应request、session、application三个域,即全域查询的Map;
    ValueStack内部的数据:
    • Action对象;
    • 模型对象(ModelDriven);
      不同的请求对应不同的ValueStack,通过在请求一个Action时,都会把当前Action的引用放到
      Valuestact中。一般情况下,当前Action放在ValueStack的栈顶。

    相关文章

      网友评论

          本文标题:struts2 笔记3

          本文链接:https://www.haomeiwen.com/subject/fxztbttx.html