zoukankan      html  css  js  c++  java
  • Struts2--标签

    通用标签:property, set, bean,include,param,debug

    控制标签: if elseif else, iterator, subset

    UI标签:theme, 默认simple xhtml, css_xhtml, ajax

    AJAX标签:补充

    $#%的区别

    $用于i18n, struts配置文件

    #取得actionContext的值

    %将原本文本属性解析为ognl, 

    index.jsp:

    <?xml version="1.0" encoding="GB18030" ?>
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <%
    String contextPath = request.getContextPath();
     %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
    <title>Insert title here</title>
    </head>
    <body>
    	访问属性
    	<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>
    </body>
    </html>
    

    tagsAction:

    package com.bjsxt.struts2.tags;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class TagsAction extends ActionSupport {
    
    	private String password;
    
    	private String username;
    
    	public TagsAction() {
    	}
    
    	public String execute() {
    		this.addFieldError("fielderror.test", "wrong!");
    		return SUCCESS;
    	}
    	
    	public String getPassword() {
    		return password;
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	
    }
    

    struts.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    
        <!--<constant name="struts.enable.DynamicMethodInvocation" value="false" />-->
        <constant name="struts.devMode" value="true" />
        <!--<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>-->
        <constant name="struts.ui.theme" value="simple" />
    	<package name="tags" extends="struts-default">
    
            <action name="tags" class="com.bjsxt.struts2.tags.TagsAction">
                <result>/tags.jsp</result>
            </action>
    
        </package>
    
    </struts>
    

    tags.jsp:

    <!--property标签-->
    <body>
    	<ol>    
    		<li>property: <s:property value="username"/> </li>
    		<li>property 取值为字符串: <s:property value="'username'"/> </li>
    		<li>property 设定默认值: <s:property value="admin" default="管理员"/> </li>
    		<li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>
    		<hr />
    
    <!--set标签--> 变量名称太长等换名时使用
    set的变量 ,如果默认scope是request的话,会放在actionContext里, 不用使用#parameters
    可以使用#或者#request. 的方式取出
    <!--set有个scope, 可以选择page, request,session, application,action,默认是action和request-->
    不写scope, 就说默认action和request, 如果指定其他scope, 就不能用action取值

    <li> set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li> <li>set 从request取值: <s:property value="#request.adminName" /></li> <li>set 从ActionContext取值: <s:property value="#adminName" /></li> <li>set 设定范围: page<s:set name="adminPassword" value="password" scope="page"/></li> <li>set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %></li>
    <li>set 设定var,范围为session: <s:set var="adminPassword" value="password" scope="session"/></li> <li>set 使用#取值: <s:property value="#adminPassword"/> </li> <!--取不到--> <li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li> <hr />

    如果set标签指定scope的话, 除了默认request, 其他的都要从指定范围里取值.不会放入actionContext

    request的话, actionContext里有, 通过request也可以取. 

    <!--bean标签--> 
    <li>bean 定义bean,并使用param来设定新的属性值:
    <s:bean name="com.bjsxt.struts2.tags.Dog" >
    	<s:param name="name" value="'pp'"></s:param>
    	<s:property value="name"/>
    </s:bean>
    </li>
    <!--与上面方式的区别是下面的有个var,就会放入action中,即便</s:bean>结束, var已经存在于actioncontext里,也可以从actioncontext里取出来, 上面的bean结束了, 栈里就没有了-->
    <li>bean 查看debug情况: <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">     <s:param name="name" value="'oudy'"></s:param> </s:bean> 拿出值: <s:property value="#myDog.name"/> </li> <hr />
    <!--include标签-->  尽量不用
    <%@ include> 静态包含
    <!include> 动态包含
    <li>include _include1.html 包含静态英文文件
    	<s:include value="/_include1.html"></s:include>
    </li>
    		
    <li>include _include2.html 包含静态中文文件
    	<s:include value="/_include2.html"></s:include>
    </li>
    		
    <li>include _include1.html 包含静态英文文件,说明%用法
    	<s:set var="incPage" value="%{'/_include1.html'}" />
          <s:include value="%{#incPage}"></s:include> <!--将#incPage强制转换成OGNL表达式--> 
    </li> <hr />

    $,#,%区别:

    $: 用于i18n和struts配置文件

    #:取得actionContext的值

    %:将原本文本属性解析为ognl, 对于本来就是ognl的不起作用 

    <!--fieldError标签--> 
    <li>
    	<s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror>
    </li>
    
    <!--ifelse标签--> 
    url里加入 &age=9&age=20, 会写入parameters里, 但是是个数组 因为可以传入多个age的值.

    <li>if elseif else:
      age = <s:property value="#parameters.age[0]" /> <br />
      <s:set var="age" value="#parameters.age[0]" />
      <s:if test="#age < 0">wrong age!</s:if>
      <s:elseif test="#age < 20">too young!</s:elseif>
      <s:else>yeah!</s:else><br />

      <s:if test="#parameters.aaa == null">null</s:if>
    </li>
    <hr />

    <!--ifelse标签-->
    可以遍历collections, map, enumeration, iterator, array
    遍历集合:
    <li>遍历集合:<br />
    <s:iterator value="{1, 2, 3}" >
    	<s:property/> |
    </s:iterator>
    </li>
    

    自定义变量:

    <li>自定义变量:<br />
    	<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
    		<s:property value="#x.toUpperCase()"/> |
        </s:iterator>
    </li>
    

    使用status属性:

    <li>使用status:<br />
    	<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
    <s:property/> | 

      遍历过的元素总数:<s:property value="#status.count"/> |
      遍历过的元素索引:<s:property value="#status.index"/> |
      当前是偶数?:<s:property value="#status.even"/> |
      当前是奇数?:<s:property value="#status.odd"/> |
      是第一个元素吗?:<s:property value="#status.first"/> |
      是最后一个元素吗?:<s:property value="#status.last"/>
      <br />
    </s:iterator>
    </li>

    map:

    <li>
      <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >  <!--#必须-->
    	<s:property value="key"/> | <s:property value="value"/> <br />
      </s:iterator>
    </li>
    

    map var:

    <li>
      <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
    	<s:property value="key"/> | <s:property value="value"/> <br />
      </s:iterator>
    </li>
    

     

    <!--subset标签-->

     

    <s:subset source="myList" count="13" start="3">
        <s:iterator>
        <s:property>
        </s:iterator>
    </s:subset>
    

     

    <!--ui标签-->

     theme, 默认是xhtml, 配置文件是default.properties

    可以在struts.xml里面j加一句话改配置: 可以改成 simple, css_html, ajax

    <contstant name="struts.ui.theme" value="simple">
    

    fielderror字符前面会显示一个圆圈,解决方法:

    1. 在src下新建文件夹template->simple->fielderror.ftl

    内容copy jar文件里的lib,core,template,simple下的fielderror.ftl, 然后删掉里面的<ul></ul>, <li>,</li>

    2. 自定义一个主题,并在struts.xml里配置  value="自定义主题"

    3, 最简单的方法:

    在jsp里写入css样式:

    .formFieldError ul li{
    	list-style-type: none   
    }
    
    <body>
    用CSS控制显示
    	<ol>
    		<li>
    		<s:form >
    		<div class="formFieldError">
    		<s:fielderror />
    		</div>
    		<s:textfield name='aaa'></s:textfield>
    		</s:form>
    		</li>
    	</ol>
    </body>
    

      

    链接:http://pan.baidu.com/s/1ntoldjV 密码:y5zo

     

      

     

  • 相关阅读:
    Linux系统分支之Ubuntu
    运维工具之Netdata
    Antd Tree组件虚拟滚动空白问题
    没有root权限的情况下安装vim
    C++ / Python测量程序执行时间
    Linux dmidecode 命令介绍
    网卡到底是什么
    flannel的革命性的变化是在哪里呢?
    kube-proxy
    cilium
  • 原文地址:https://www.cnblogs.com/wujixing/p/5175732.html
Copyright © 2011-2022 走看看