• ognl标签
    • 注意
      • jquery中不能定位ognl标签,而要用标签自己生成的id定位(看源码得到)
    • 使用:
      • <%@ taglib uri=“/struts-tags” prefix=“s” %> - tld映射文件路径
        • struts2-core-2.3.1.1.jar包中
        • /META-INF/struts-tags.tld
    • '#'出现的地方
      • o 除ValueStack 之外的所有struts内置对象的取值前面都要加
      • o 取JavaBean中的属性时要加 ”,如”#user.username”,ValueStack中也不例外
      • o 构造Map对象,Map:#{‘male’:‘[男]’,‘female’:‘[女]’},构造radio和select标签,如
        • <s:radio list=”#{‘male’:‘aa’,‘bb’:‘cc’}” name=“gender2” /> - o 迭代数组或list集合
        • 集合的投影:userList.{username}
        • 集合的过滤:userList.{?#this.age>22}
    • 主题与模板
      • 主题:为多个模板提供风格
        • struts2-core-2.3.1.1.jar包中
          • template中的四个主题
            • archive # 其中是.vm文件,其它是.ftl文件。vm与ftl是两种视图技术
              • ajax # 除此之外其它都不支持ajax
              • simple
              • xhtml
            • xhtml # 默认主题,default.properties配置文件中定义
            • css_xhtml
            • simple
        • 修改主题
          • 1.struts.properties 中修改
            • struts.ui.theme=simple # 针对当前webapp
          • 2.<s:form theme=“xhtml”> # 只针对当前表单
          • 3.<s:textfield name=“username” theme=“simple”> # 修改某个标签的属性
      • 模板:为标签提供样式
        • 做模板的技术freemarker
    • ognl标签的优点:自动排版、验证数据回显、国际化
    • 所有标签:
      • 逻辑标签
        • 对 Map 集合的迭代:
          • <s:iterator value=“#session.fileMap” var=“entry” status=“stat”> - <s:property value=“#entry.key”/> - <s:if test=“#stat.count%4==0”></s:if> - </s:iterator> - 对 List 集合的迭代 List userList
          • 普通迭代
            • <s:iterator var=“user” value=“userList”> # 投影语法List<user>中的所有username - <s:property value=“#user.username”/> - 投影语法
            • <s:iterator var=“username” value=“userList.{username}”> - <s:property/> # 这里不用写属性value=“username”就可以对page域中的username进行显示 - 过滤语法
            • <s:iterator var=“user” value=“userList.{?#this.age>9}”> - this代表当前被迭代的元素 ?#是所有 ^#是第一个 $#是最后一个 ?…[0]按标记取
            • <s:property value=“#user.username” /> - 显示标签(UI标签)
        • 普通字符串中使用ognl
          • jsp中用%{} xml中用${}
          • 例如
          • jsp中:<s:textfield label=”%{#attr.testValueStack}”/>
          • xml中:4000
            • <message>${min}</message> - 普通信息
          • <s:text name=""/> - 输出值
          • 迭代器中
            • <s:property/> # 直接输出被迭代的内容(简单) - <s:property value=“aa”/> - <s:property value=“aa”/> - 普通
            • <s:property value=“username”/> # 输出标签,得到valueStack中属性 - <s:property value=“#request.name”/> # 得到request域对象中的值 - request session application parameters attr
              • '#attr'优先级:page,request,valueStack,session,application
        • 显示验证拦截器的验证信息集合中的数据:
          • <s:fielderror/> # 显示所有错误信息 - <s:fielderror fieldName=""/> # 显示验证返回的错误信息 - 单选
          • <s:radio list=”#{‘male’:‘男’,‘female’:‘女’}” name=“gender2” value=‘男’> - 自动加class id
        • 多选
          • <s:select multiple=“true” list=”#{‘bj’:‘北京’,‘sh’:‘上海’,‘gz’:‘广州’}” name=“select1” value=”{‘sh’,‘bj’}”/> - 表单 # 在ognl的标签中, struts的验证消息自动回显,不用加<s:fielderror/>标签
          • <s:form action=""> # 默认中加上了 method=“post” action中加上了当前网站了contextPath路径 - <s:textfield label=“用户名” name=“username” /> - <s:password label=“密码” name=“password” /> - <s:submit value=“登录” /> - 国际化 # 国际化一般放在整个网站的最后写
          •  伪国际化:将不同语言的页面放在不同文件夹中分别访问
          • 国际化是通过i18n拦截器实现的
          • 1.创建国际化信息文件
            • message_zh_CH.properties # 基名_语言名_国家名.properties
              • username=xxx
              • password=xxxx
              • submit=xx
            • message_en_US.properties
            • ..
            • message.properties # 默认的显示语言
              • 找伊拉克没有的话找本地区语言,本地语言没有的话找其它(默认的或美国等)
          • 2.struts.properties中引入国际化配置的属性文件
            • struts.custom,i18n.resources=struts2/tag/i18n/message # 从src文件夹路径开始,只写基名
          • 3.验证消息国际化
            • message.properties文件中配置属性validationRequiredUsername=用户名错误
            • validation.xml文件中
            • <message key=“validationRequiredUsername”></message> - 4.jsp文件中用key属性代替 label属性(或其它在页面上显示信息的属性),key中写国际化信息文件中的key
            • <s:form action=“taglogin”> - <s:textfield key=“username” name=“username” /> - <s:password key=“password” name=“password” /> - <s:submit key=“submit”/> - </s:form> - 5.普通信息的国际化
            • message.properties中配置属性 normalMessage:普通信息
            • jsp中<s:text name=“normalMessage”/>
          • 6.测试
            • intername选项 — 语言 改地区访问
    • xml文件中的ognl标签
      • o ${aa}
        • 1.调用转到该标签类的getAa()方法得到aa的值替换${aa}
        • 2.本标签中name=“aa”的标签的文本节点的内容
      • o {1}{2}{3}..{n}
        • 匹配本标签中name=“a” 中的第n个‘*’,用于通配传递过来的参数的一部分的值
  • ognl表达式
    • ognl 开源,java写的免费标签,是struts2特有的
    • xml文件中
      • ${Xxx} 取值栈中栈中的东西,如action类中的属性
      • ${#Xxx} 取值栈中值的东西,如request,session域中的数据(其实就是老师说的内置对象【valueStack就是值栈】)
    • jsp文件中
      • <s:iterator value=“#session.fileMap” var=“entry” status=“stat”> - <s:property value=“#entry.key”/> - <s:if test=“#stat.count%4==0”></s:if> - </s:iterator>