struts常用标签---html标签库
<html:html>
<html:html>标记可以说是Struts所有标记中最简单的了。它简单的在页面开始处和结尾处产生一个的标记。在Struts1.1以前的版本中,该标记有一个locale属性。如下所示:
<html:html locale="true">该属性的作用是读取用户session中的locale属性并显示出来。比如用户使用的是zh-CN,那么,生成的页面代码将如下所示:
<html locale="zh-CN">不过,从Struts1.2开始,该属性被lang所取代。原因是locale属性当其值为true时,会读取session中的locale信息。但是当HttpSession不存在时,它会强制创建一个新的session并将HTTP请求中的locale信息放入session中去。这种方式时显并不合理,因此,从Struts1.2开始,locale属性被lang属性所取代
<html:html lang="true">当使用lang属性后,若没有session对象时,就根据Http请求中的locale信息来输出相应的语言信息。
<html:base>
<html:base>用于在网页的head部分生成一个base标记。它的用法很简单,只需在head部分加入如下标记就可以了
<html:base/>
当经过Web容器编译后,会生成如下的一段标记。
<base href="http://localhost:8080/taglib1/html-base.jsp">
这也就是本网页的实际的URL地址。请记住,base标记将不会被显式的显示在网页上,只有通过查看生成的 html源代码才可以看得见。其实,base标记的含义不仅是生成本网页的URL,它更重要的功能是为该页面内的所有其它链接提供相对的位置。例如,在本网页使用了<html:base>标记后,生成了如上的URL地址。倘若此时需要指定一张图片,只须使用相对的位置链接就可以了。假设在taglib1的根目录下有一个image目录,里面有一张叫image.gif的图片,则引用的代码如下所示:
<img src="image/image.gif">
这张图片的实际URL就是:
http://localhost:8080/taglib1/image/image.gif
<html:link>
<html:link>标记是用来生成HTML中的<a>标记的,它带有多种参数,可以和Struts框架结合生成多种不同形式的链接。
1.外部完整URL链接
<html:link>标记最简单的用法就是直接链到一个外部的完整URL链接,比如用户需要创建一个到新浪网的链接。可以使用href属性,代码如下:
<html:link href="http://www.sina.com.cn">
新浪网
</html:link>
以上代码经编译后会生成如下html代码:
<a href="http://www.sina.com.cn">新浪网</a>
2.相对URL链接
当需要从同一个应用中的某个网页链接到另一个网页时,可以使用page属性,代码如下:
<html:link page="/index.jsp">
首页
</html:link>
当需要向所链接的页面传输某些参数时,可以将参数直接加在请求的尾部就可以了。例如,下面的代码示例将向测试页面传递一个字符串参数和一个整型参数:
<html:link page="/test.do?testString=a+new+string&testInt=10000">
测试页面
</html:link>
由它生成的页面html代码如下所示:
<a href="/taglib1/test.do?testString=a+new+string&testInt=10000">
测试页面
</a>
下面的链接是一个测试,它向测试页面传递两个参数,一个是testString,它的值为"a new string",另一个是testInt,它的值为10000。
3.全局转发URL链接
在Struts的struts-config.xml文件中定义了<global-forward>全局转发变量,可以通过<html:link> 来链接到这种全局转发的URL链接,使用forward属性,示例代码如下所示:
<html:link forward="index">
回到主页
</html:link>
生成的页面html代码如下所示:
<a href="/taglib1/index.jsp">
回到主页
</a>
4.带有页面变量的URL链接
在创建链接时常常需要访问一些页面的变量,将它们的值作为参数传递给将要链到的网页。<html:link>标记也提供了这样的功能。
如果仅需传递单个参数,可以使用paramID与paramName这两个属性。以下为代码示例
<%
String test1 = "testABC";
request.setAttribute("stringtest",test1);
%>
<html:link page="/test.do" paramId="testString" paramName="stringtest">
测试页面
</html:link>
在这段程序中,首先定义一个变量为test1它的值为testABC。然后将它存入request对象中,命名为stringtest。接着,使用<html:link>标记的paramName属性指定欲从内建对象中读取值的变量名,此处也就是stringtest。然后,使用paramId属性指定传值的目标参数,此处为testString。点击下面的链接可以通过测试页面查看运行效果:
如果需要传递的参数有多个,则可使用<html:link>标记的name属性来实现,name属性的值是一个 java.util.HashMap类型的对象名称,它的每一个"键/值"对就代表一对的"参数名/参数值",以下为代码示例:
<%
HashMap para_map = new HashMap();
para_map.put("testString","testABC");
para_map.put("testInt",new Integer(10000));
request.setAttribute("map1",para_map);
%>
<html:link page="/test.do" name="map1">测试页面</html:link>
在上面的代码中,首先在页面上声明一个HashMap类型的变量para_map用来存储将要传递的参数,接着,向 para_map中存入两个对象。然后再将该对象存入页面的request对象中。使用<html:link>标记的name属性来将参数带入目标页面中。实际生成的html代码如下所示:
<a href="/taglib1/test.do?testString=testABC&testInt=10000">测试页面</a>
<html:rewrite>
<html:rewrite>标记是用来输出链接中的URI的。所谓URI就是指一个完整URL地址去掉协议,主机地址和端口号以后的部分。它的众多属性都和<html:link>一样,只是它输出的仅是一个URI字符串,而非链接。示例代码如下:
<html:rewrite page="/test.do?testString=testABC"/>
它生成的html如下:
/struts/test.do?testString=testABC
可以看出,它输出的内容只是实际URL中除去协议,主机地址和端口号以后的部分。实际的URL应为:
http://localhost:8080/taglib1/test.do?testString=testABC
它也可以使用paramId和paramName等属性,如下面的例子:
<%
String str = "testABC";
request.setAttribute("test1",str);
%>
<html:rewrite page="/test.do" paramId="testString" paramName="test1" />
实际生成的html代码如下所示:
/struts/test.do?testString=testABC
下面的例子将演示当有多个参数要传递时<html:rewrite>生成的URI样式。它与<html:link> 一样,都使用name属性来传递多个参数。
<%
HashMap para_map = new HashMap();
para_map.put("testString","testABC");
para_map.put("testInt",new Integer(10000));
request.setAttribute("map1",para_map);
%>
<html:rewrite page="/test.do" name="map1"/>
实际生成的html代码如下所示:
/struts/test.do?testString=testABC&testInt=10000
这里有一点需要注意的,当从网页源代码上看生成的多参数链接时,在多个参数间连接符并不是简单的& 而是一个&,在html代码中它就代表&。
<html:img>
<html:img>标记是用来显示图片的,它的用法很简单,如下所示:
<html:img page="/a.jpg"/>
此处值得注意的一点是,在page属性后图片的路径并没有因为设定了<html:base>而使用了相对路径,而是依然使用了绝对路径。如果使用非Struts的<img src="a.jpg">标记则可以正确显示图片。
<html:form>
<html:form>标记生成页面表单,这个由Struts标记生成的表单和普通的HTML表单略有不同。普通的表单用法如下所示:
<form method="post" action="/loginServlet">
<input type="text" name="username">
<input type="text" name="username">
</form>
可以看到,在普通的form标记后的action属性的值是一个Servlet(当然也可以是一个JSP文件),而使用了<html:form> 标记后,代码则变成了下面的样子:
<html:form action="/test.do">
其中action属性后跟的是一个在struts-config.xml文件中定义的Action,而这个Action也必定要对应一个ActionForm才能完成其应有的功能。所以,对每个<html:form>标记来说,都该对应一个ActionForm。而这个ActionForm中的属性值也将和网页上的<html:form>表单中的各个表单项相对应。这些表单相将会是类似于<html:text>的一些表单元素。下面有一段示例代码:
<html:form action="/test.do">
输入字符串testString:<html:text property="testString"/>
提交:<html:submit property="submit"/>
</html:form>
这段代码将在页面上显示一个文本框和一个提交按钮,当用户在文本框中输入一个字符串后并点击按钮,将会触发test这个Action。在初始化这个JSP页面时,JSP引擎在初始化<html:form>标记时将会初始化test这个Action所对应的ActionForm,当用户提交表单时,表单项中的testString刚好对应ActionForm中的这一项(只需名称相同)。
此处值得注意的一点是,在<html:form>表单中的各个表单项一定要在ActionForm可以找到一个对应的项,这样才能在提交的时候进行赋值,否则,Struts将会报一个错,显示无法找到某表单项在ActionForm的对应get方法
<html:text>
<html:text>标记比较简单,是用来在页面上生成一个文本框,该标记通常被用在一个<html:form>中。以下是一段示例代码:
<html:form action="/test.do">
输入字符串testString:<html:text property="testString"/>
输入整数testInt:<html:text property="testInt"/>
<html:submit property="submit" value="submit"/>
</html:form>
通常,<html:text property="testString"/>语句将生成以下的html代码:
<input type="text" name="testString">
可以看到,<html:text>标记的property属性指定了文本框的名称,如果它位于<html:form>表单内部,那么, property的值若刚好与ActionForm中的一项对应时,该文本框内的值就将被赋给该ActionForm中的该项。以test这个Action所对应的ActionForm为例,它其中就有这么一段代码刚好与上面的<html:text>相对应:
private String testString = null;
public void setTestString(String testString){
this.testString = testString;
}
public String getTestString(){
return testString;
}
从上面的代码可以看出用户在提交表单后,Struts会自动将property="testString"的<html:text>文本框的值赋给 ActionForm中的testString字段。
<html:password>
<html:password>用来在页面上产生一个密码框。所谓密码框其实就是一个文本框,只不过对它的任何输入都将显示为"*"。它的用法和<html:text>差不多,property属性用来表示它的名称。
<html:form action="/test.do">
<html:password property="testString"/>
<html:submit property="submit" value="查看测试页面"/>
</html:form>
上面的代码中将一个<html:password>标记放在一个表单中,这也是必须的,否则Struts框架会报错。以下是上面代码的运行效果,无论用户输入什么,都只会显示"*"。点击提交钮后,会在测试页面看到用户输入的内容。
<html:textarea>标记和&html:textarea基本相同,只不过它会产生一个更大的文本输入域。同样的,它也需要存在于一个<html:form>表单中,下面是示例代码:
<html:form action="/test.do">
<html:textarea property="testString" rows="8"/>
<html:submit property="submit" value="查看测试页面"/>
</html:form>
<html:hidden>
<html:hidden>标记用于在网页上生成一个隐藏的字段。众所周知,网页上总有一些信息不希望被用户看到,但在提交的时候却需要传递到服务器上以帮助业务逻辑进行处理。在传统的html中,隐藏字段是用下面的方式表示的:
<input type="hidden" name="testString" value="hiddenString">
<html:hidden>标记不需要被限定在一个表单的内部来使用,以下的例子还是将它放在一个表单的内部。当用户点击 "查看测试页面"的按钮时,会看到测试页面中testString被赋与了"hiddenString"的值。
在<html:hidden>标记中有一个write属性,可以决定在页面上是否显示出这个隐藏的值,如下面的代码:
<html:hidden property="testString" value="hiddenString" write="true"/>
运行效果如下所示,虽然只有短短的一个字符串,但可以看出标记还是把testString的value打印出来了。
hiddenString
<html:submit>
<html:submit>标记生成一个提交按钮,用于提交表单。它的用法很简单,如下所示:
<html:submit property="submit" value="提交"/>
它会生成如下的html代码
<input type="submit" name="submit" value="提交">
另外,<html:submit>标记还可以写成如下的形式,它也将生成同样的html代码。
<html:submit>提交</html:submit>
<html:reset>
<html:reset>标记生成一个复位按钮,用于复位表单内的各项元素。代码如下:
<html:form action="/test.do">
<html:text property="testString"/>
<html:submit property="submit" value="Submit"/>
<html:reset property="reset" value="reset"/>
</html:form>
<html:radio>
<html:radio>标记生成一个单选框,示例代码如下:
<html:form action="/test.do">
<html:radio property="testRadio" value="testvalue1"/>
</html:form>
它有一个value属性,用来指定当选中该单选框时ActionForm中对应的属性的值。下面是另一种单选框的用法:
<html:form action="/test.do">
<html:radio property="testRadio" value="value1">Choice1
<html:radio property="testRadio" value="value2">Choice2
<html:radio property="testRadio" value="value3">Choice3
</html:form>
在上面的代码中,单选框一共有三个,这三个单选框组成一个单选框组,只能选取其中一个。无论选中哪一个,它的值在提交表单后都将赋给ActionForm中相对应的属性,如果三个单选框一个都没有选中,那么该属性的值将为一个空串。
运行效果如下所示: