首页 > 代码库 > (八)Struts标签基础

(八)Struts标签基础

一、Struts标签分类

技术分享

 

二、标签的使用

  2.1  标签的主题

  • 主题的设置与struts.xml中的常量<constant name="struts.ui.theme" value="http://www.mamicode.com/xhtml" /> 决定。
  • 每个主题都会对一些标签产生作用,而这些作用被定义在一些文件文件里,比如

    技术分享 checkbox.ftl这个文件定义的是对checkbox标签产生作用的语法。

     

  • 主题共有以下几种(版本为struts2-core-2.3.14.jar):

路径为:struts2-core-2.3.14.jar包里的

技术分享

    2.1.1  默认主题即template.xhtml , 会给标签自动添加一些属性或者子标签,可能打乱我们设计好的布局

<body>
    <pre>
        <h3>默认主题</h3>
    <table border="1">
<tr> <td>用户名</td> <td> <s:textfield></s:textfield> </td> </tr>
    </table>
</pre> </body>
  • 我们原本的设计是这个表格一共一行且只有两个空格, 但是结果为:

技术分享

  • 出现这种情况是因为,template.xhtml这个主题会自动帮标签添加一些属性或子标签,查看源代码可知产生了td和tr子标签:

技术分享


 

   2.1.2  simple主题(最常用),额外添加的标签很少,不会对我们的布局产生大的影响。

  •  在struts.xml中设置常量<constant name="struts.ui.theme" value="http://www.mamicode.com/simple" />

 index.jsp

<body>
    <pre>
        <h3>默认主题</h3>
        <table border="1">
        <tr>
            <td>用户名</td>
            <td> <s:textfield></s:textfield>  </td>
        </tr>
        </table>
    </pre>
</body>

查看源码:

  • 技术分享对比我们的代码,文本框只添加了name属性
  • 注意:在编写页面标签的时候,最好先把主题设置为simple主题,否则在布局的时候会很麻烦。

    2.1.3  定制主题

  •   步骤: 
    •   在src目录下新建一个文件夹,叫template (template名不能改成别的)
    •   在template中在新建一个文件夹,名字自定义。
    •   在自定义的文件夹中,将要修改的控制的ftl文件拷贝,进行修改。比如我们定制的主题中有对文本输入标签进行设定,那么我们就可以到simple这个主题里找到text.ftl这个文件(注意:text.ftl这个文件主题系统会自动作用在文本框里,如果换成别的名字则无法起作用),然后拷贝到我们自定义的文件夹里,再对text.ftl这个文件进行修改。
    • 把text.ftl中需要添加的文件添加进来,text.ftl需要以下四个文件,然后在simple主题中找到这四个文件然后拷贝到自定义文件夹里即可。

技术分享

    •   修改text.ftl  

技术分享 红框内的内容是我们添加的css属性。

    •   最后在标签中应用此主题,<s:textfield theme="self"></s:textfield>  //self为tempalte包的主题包名,因为这里我们只定义了一个标签的主题,如果我们在在self自定义主题包里对大量标签进行了主题设定,那么我不必每个标签都使用theme属性来引入主题,只需要struts.xml中设置常量<constant name="struts.ui.theme" value="http://www.mamicode.com/self" /> 即可。

 

 结果:

技术分享可知标签主题已经变成我们自定义的了。


 

  2.2  表单标签

    2.2.1  为什么要使用表单标签?(struts表单标签和input标签的区别)

  • struts表单标签可以与Action中的属性进行绑定,可以实现属性值到控件的Value值回填的操作。
  • 示例:
  • index.jsp:
<body>
    <a href="<%=path%>/tag/form">表单标签</a>
</body>
  • struts.xml
<struts>

       <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <constant name="struts.multipart.maxSize" value="209715200"></constant>
    <constant name="struts.action.extension" value="action,,"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.reload" value="true"></constant>
    <constant name="struts.ui.theme" value="simple" />
    <constant name="struts.configuration.xml.reload" value="true"></constant>
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
    <constant name="struts.handle.exception" value="true"></constant>

    <package name="default" namespace="/tag" extends="struts-default">
        <action name="form" class="tag.FromAction">
            <result name="formjsp">/tag/form.jsp</result>
        </action>
    </package>
</struts>
  • FromAction .java
package tag;

public class FromAction {
    private String textName;
    
    public String getTextName() {
        return textName;
    }

    public void setTextName(String textName) {
        this.textName = textName;
    }

    public String execute(){
        
        this.textName="Action对成员变量textNam赋值后会自动回填到表单中";
         return "formjsp";
    }

}
  • form.jsp
<body>    
    <pre>
        <s:textfield name="textName"></s:textfield>
    
    </pre>
</body>

结果:

技术分享

技术分享

  • 由结果可知,我们在Action中设置了一个成员变量textName,而这个成员变量名和<s:textfield name="textName"></s:textfield>是一样的,所以当我们在Action中对textName进行赋值的时候,struts会自动把值回填到<s:textfield name="textName"></s:textfield>标签里。 而如果在input标签中要实现数据的回填,则要在servlet中把值存放在作用域中,然后在jsp页面里用el表达式显示出来才行。
  • input标签实现数据回填:

      把值存放在作用域中 :request.setAttribute("属性", "input标签实现数据回填");

     在jsp页面中把值取出来并显示: <input type="text" value="http://www.mamicode.com/${requestScope.属性}"/>或者 <input type="text" value="http://www.mamicode.com/

 


 

 

 

 

 

 

 

  2.3  非表单标签

  2.4  数据显示标签

  2.5  控制标签

  2.6  ajax标签

 

 

 

 

 

  

 

(八)Struts标签基础