首页 > 代码库 > (八)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/ (八)Struts标签基础
2.3 非表单标签
2.4 数据显示标签
2.5 控制标签
2.6 ajax标签
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。