struts 标签之HTML详细说明

Struts是Apache 

Jakarta的一个著名的开源项目,目标是为构建基于Java的web应用程序提供一个

框架。Struts提供了非常多的标签,依据功能和使用习惯的不同被分到了

五个标签库中:
  • Bean Tags:该标签库包含的标
    
    签可以用来创建bean、访问bean和访问bean的属性。同时提供了依据cookies、
    
    headers和parameters的值创建相关bean的能力。 
  • HTML 
    
    Tags:该标签库包含的标签可以用来创建Struts输入表单。 
    
    
  • Logic Tags:该标签库包含的标签可以用来进行逻辑判断
    
    、集合迭代和流程控制。 
  • Nested Tags:该标签库建立在
    
    前三个标签库的基础上,具有前三个标签库的所有功能,只是允许标签间的嵌套
    
    。 
  • Tiles Tags:该标签库包含的标签可以用来创建tiles
    
    样式的页面。 

 标签的公共特征

  &nbs p;
 属性  说明
id命名自 定义标签创建时的脚本变量名。
name指出关键字值, 在该关键字下可以找到一个存在的bean 。如果给出了scope属性, 则仅仅在scope中查找。否则,根据标准的顺序在各种 scope中查找: (page, request, session, or application)
 property指出bean 中的某 个属性,可以在其中检索值。如果没有标明,则使用对象本身的值。
scope定义了 Bean在哪个范围(page, request, session, or application)中 被查找。如果没有标明按顺序查找。脚本变量(id)将在相 同的范围中创建。

 

 

 

 

 

Html 标签库


 

 

Struts HTML标签和HTML元素对照表

 

html:html

它有两个属性:localexhtml,两者都不是必需的。

<html:html locale=/"true/">


 此行代码解析后:


 <html lang=/"en/">

locale生成的结果取决于Struts应用程 序所位于的服务器的locale。如果你将应用程序部署到一个不同

locale的服务器,你不 需要改变代码,Locale会自动调整。

html:base

表示所包含页面的绝对位置。这个标签只有内嵌在head标签中 才有效。

 <html:base/>


 
此行代 码解析后:


 <base href=/"http://www.mymain.com/myStrutsApp/te sting.jsp/">

html:img

最重要的属性 page:图象文件的路径,前面必须带有一个斜线。其它属性:heigntwidthalt

<html:img page=/"/logo.gif/&quo t; height=/"50/" width=/"200 /" alt=/"Web Logo/"/>

 

html:form

 使用<form>标签时必须遵循一些规则:

1.     标签中必须包含一个action属性,它是这个标签中唯一必需的属性。如果不具备该属性则JSP页面会抛出一个异常。之后你必须给这个action属性指定一个有效值。一个有效值是指应用程序的Struts配置文件中元素里的任何一个子元素的访问路径。而且相应的元素中必须有一个name属性,它的值是form bean的名称。

<html:form action=/"/login/&quo t; > 

 如果你有上述一个标 签 ,那么你的Struts配置文件的元素中必须有一个如下显示为 粗体的元素: 
<action-mappings> 
     <action path=/"/login/&qu ot; 
      type=/"com.javapro.struts.L oginAction/"  
      name=/"loginForm/"
      scope=/"request/"
      input=/"/login.jsp/"&g t;
      <forward name=/"suc cess/" path=/"/mainMenu.jsp/"/>
    </action>
    .
    .
    .
</action-mappings>  //
这就是说一个form标签是和 form bean相关联的。

2   

任何包含在<form>中用来

接收用户输入的标签(<text><password><hidden><textarea><radio><checkbox><select>)必须在相关的

form bean中有一个指定的属性值。比如,

如果你有一个属性值被指定为“username”<text>标

签,那么相关的form bean中也必须有一个名为

“username”的属性。输入

<text>标签中的值会被用于生成

form beanuserName属性。


    
    
     
     <form>
     
     标签还有一些不是必须但很有用

的
     
     
     
     次要
     
     
     
     属性。
     
     
比如,你可以用 focus 属性来生成 JavaScript ,它会 定焦 focus )到该 form 所包含的一个元素上 。使用 focus 属性时你需要给它指定元素的名称。
       
       
<body>
 <html:form action=/"/login/" focus=/&qu ot;password/">
 User Name: <html:text property=/"userNa me/"/>
 <br>Password: <html:text property=/"pa ssword/"/>
 <br><html:submit/>
 </html:form>
 </body>

 代码解析后:
 <body>
 <form name=/"loginForm/" method=/" post/"  action=/"/myStrutsApp/login.do/">
 User Name: <input type=/"text/"&nb sp;name=/"userName/"  value=/"/">
 <br>Password: <input type=/"text/" ;  name=/"password/" value=/"/">
 <br><input type=/"submit/"   value=/"Submit/">
 </form>
 <script language=/"JavaScript/"  type=/"text/javascript/">
  <!--
  if (document.forms[/"loginForm/"].elements [/"password/"].type != /"hidden/")  
       document.forms [/"loginForm/"].elements[/"password/"].focus()
  // -->
 </script>

 </body>
有没有看到这个标签库是如何建立

JavaScript来定焦到password元素上的这也是

该库让人着迷的地方之一。你不用担心如何在客户端进行
编程,它会帮你自动

生成。

 

还可以看到, <form> 标签中 method 属性的缺省值是 POST

<text>
标签、 <hidden> 标签、 <textarea> 标 签、 <radio> 标签、 <checkbox> 标 签、 <submit> 标签、 <reset> 标 签:
都有一个 property 属性,最后会被转换成 HTML 中的 name 属性,当然还有 name value 属性。
html:password
 

   
   
<html:password property=/"passw ord/"  redisplay=/"false/"/>
该标签中的一个很重要的属性是

"redisplay",它用于重新显示以

前输入到这个区域中的值。该属性的缺省值为true。然而,为了使

password
不能被重新显示,你或许希望将该属性的值设为

false
html:cancel

html:cancel标签生成一个取消按 钮。当点击该按钮后action servlet会绕过相应的form bean的validate()方法 ,同时将控制权交给相应的action。在该action中可以使用 Action.isCancelled(HttpServletRequest)方法判断是否被取消了。如果返回 true表示这个action被取消了,否则表示这个action没有被取消。

请注 意,如果您修改了html:cancel标签的property属性值,那么struts提供的 cancel探测机制就失效了,您自己必须提供类似的机制。

下面是可取消 的action的配置文件,注意<set-property property="cancellable" value="true"/>这一行,如 果不添加Struts会抛出org.apache.struts.action.InvalidCancelException异 常。这是我在完成本指南的过程中发现的唯一向下不兼容的地方。

<action path="/cancel" 
  type="org.solo.struts.action.CancelAction" 

name="cancelForm" 
    scope="request">
  <set-property property="cancellable" 

value="true"/>
  <forward name="success" path="/cancel.jsp" 

/>
</action>

下面是html:cancel标签的代码:

<html:cancel>取消

</html:cancel>

下面是对应的action中的代码:

if(isCancelled

(request)){			
  //action被取消时要做的事情写在这里
  return mapping.findForward("cancel");
}else{
  //action没有被取消时要做的事情写在这里
  return mapping.findForward("success");
}

 

html:select

 

html:select标签生成一个select元素。是单选 还是多选取决于该标签的multiple属性。如果指定了 multiple="true"则为多选,此时对应的属性应该是一个数组。如果 没有指定multiple="true"则为单选,此时对应的属性应该是标量。

注意:为了正确的处理没有做任何的选择的情况,在ActionForm中的 reset()方法中必须将标量属性设置为默认值而将数组的长度置为0。

另 外的一个重要问题就是struts如何生成option元素了,这个任务struts交给了 html:option、html:options和html:optionsCollection三个标签。

html:option

html:option标签生成一个HTML的option元素。 该标签必须嵌在html:select标签中。它的显示文本来自其标签体,也可以来自 于资源文件。它的value属性用来指定什么值将要被提交。

<html:option 

value="one">one</html:option>
<html:option value="two">two</html:option>

html:options标签

html:options标签生成多个HTML的option元 素。该标签必须嵌在html:select标签中。而且工作方式有些特殊,它的name与 property属性和其它标签的name与property属性意义不一致,让我们具体看一下 它的工作方式。

  • 指定collection属性
  • 没有指定 collection属性

指定collection属性

让我通过示例来介 绍在指定collection属性时该标签的工作方式,首先要说明selectForm中的 persons和listForm中的persons完全一致。请参见bean:define标签。

下 面的代码先利用bean:define标签将selectForm中的persons取到page作用域中, 然后html:options标签再依据collection="personCollection"选中 这个persons并将其中的每一个对象(Person类型)生成一个option元素。该标签 的property="id"表示persons中的对象(Person类型)的id属性将作为 option元素的value值。该标签的labelProperty="name"表示persons 中的对象(Person类型)的name属性将作为option元素的label值。

当这个 select提交时所选择的值将被提交到selectForm (name="selectForm")中的person对象(这是在SelectForm中声明的一 个Person类型的域专门用来接收提交的值)的id属性中 (property="person.id")。

<bean:define 

id="personCollection" name="selectForm" 
  property="persons"/>
<html:select name="selectForm" 

property="person.id" size="1">
  <html:options collection="personCollection" 

property="id" 
    labelProperty="name"/> 
</html:select>

没有指定collection属性

让我通过示例来介绍没有指定 collection属性时该标签的工作方式,先来看看ids和names的定义:

  

private List<String> ids = null;
  private List<String> names = null;

上面的代码来自SelectForm,其中ids是一个String的列表,names也 是一个String的列表。我们暂时假定这两个列表含有相同数目的元素。有了这些 让我们开始介绍下面的代码。html:options标签用ids中的第i个值作为option元 素的value值同时使用names中相同位置的值(第i个值)作为option元素的label值 。如果ids比names长那么多出的ids中的值将即作为option的value又作为option 的label。如果ids比names短那么多出的names的值会被丢掉。

当这个 select提交时所选择的值将被提交到selectForm (name="selectForm")中的person对象(这是在SelectForm中声明的一 个Person类型的域专门用来接收提交的值)的id属性中 (property="person.id")。

<html:select 

name="selectForm" property="person.id" 

size="1">
  <html:options property="ids" 

labelProperty="names"/> 
</html:select>

html:optionsCollection标签

html:optionsCollection标签生 成多个HTML的option元素。该标签必须嵌在html:select标签中。它的功能和 html:options标签的相同,但是它的name与property属性和其它标签的name与 property属性意义一致,理解起来比较自然。

让我通过示例来介绍 html:optionsCollection标签的用法。首先依据name="selectForm" 和property="persons"取到selectForm中的persons列表,然后将列 表中的对象(Person类型)的id属性作为option元素的value值 (value="id"),将列表中的对象(Person类型)的name属性作为option 元素的label值(label="name")。

<html:select 

name="selectForm" property="person.id" 

size="1">
  <html:optionsCollection name="selectForm" 

property="persons" 
  label="name" value="id"/> 
</html:select>

下面是一个多选的示例,虽然示例中使用了html:options标签,但是 html:option和html:optionsCollection也能够用来多选。而且您还必须意识到 html:option、html:options和html:optionsCollection这三个标签可以同时使 用。代码中的personIds是SelectForm中声明的一个String[]类型的数组用来接 收提交的多个值。

<html:select name="selectForm" 

property="personIds" 
    multiple="true" size="2">
  <html:options property="ids" 

labelProperty="names"/> 
</html:select>
html:chekbox

html:check标签生成一个checkbox 。这里的value值可以是true,yes或on。如果您要提交其它的值(如某种形式的 标识)应该考虑使用html:multibox标签。

注意:为了正确的处理没有选中 的checkbox您必须在reset()中设置对应的属性为false。

下面的代码示 例了html:checkbox标签的用法,其中CheckboxForm中声明了三个boolean类型的 域,如下:

  
               
  
  	
  private boolean one = false;
  private boolean two = false;
  private boolean three = false;
<html:checkbox name="checkboxForm" 

property="one">
  One
</html:checkbox>
<html:checkbox name="checkboxForm" 

property="two">
  Two
</html:checkbox>
<html:checkbox name="checkboxForm" 

property="three">
  Three
</html:checkbox>

如果选中后被提交则相应的属性的值为true。

html:radio

html:radio标签生成一个radio。主要的用法有 两种,下面我们通过代码来示例。

下面的代码示例了html:radio标签的 一般用法,如果被提交则选中的radio的value值将被提交到radioForm中的id中 。

<html:radio name="radioForm" 

property="id" value="00001">
  One
</html:radio>
<html:radio name="radioForm" property="id" 

value="00002">
  Two
</html:radio>

下面的代码示例了html:radio标签的典型用法,其中的persons和 bean:define标签中的一致,您可以参考bean:define标签。我只介绍这个 <html:radio idName="person" property="id" value="id">,idName指定html:radio要使用的bean(这里为 person),value="id"表示person的id属性将作为radio元素的value 值而property="id"表示提交时选中的radio的值将被提交给 radioForm中的id属性。

<logic:notEmpty 

name="radioForm" property="persons">		
  <logic:iterate id="person" name="radioForm" 

property="persons">
    <html:radio idName="person" property="id" 

value="id">
      <bean:write name="person" 

property="name"/>
    </html:radio> 
  </logic:iterate>		
</logic:notEmpty>
html:multibox

html :multibox标签生成多个checkbox。当您要使用大量的checkbox时使用这个标签 非常方便,可以使您避免在ActionForm中声明大量的boolean类型的变量,带之 以一个数组就行了。

注意:为了正确的处理没有选中的checkbox您必须在 reset()中设置数组的长度为0。

下面的代码示例了html:multibox标签的 一般用法,如果被提交则选中的所有checkbox的value值将被提交到 multiboxForm中的selectedItems中,这是一个String[]数组。

<html:multibox name="multiboxForm" 

property="selectedItems" 
  value="00001"/>
<html:multibox name="multiboxForm" 

property="selectedItems" 
  value="00002"/>

下面的代码示例了html:multibox标签的典型用法:

<logic:iterate id="person" 

name="multiboxForm" property="persons"> 
  <html:multibox property="selectedItems">
    <bean:write name="person" 

property="id"/>
  </html:multibox> 
  <bean:write name="person" 

property="name"/> 
</logic:iterate>
 

html:javascript标签生成用于校验 的javascript脚本代码。

下面的代码片段示例了html:javascript标签的 基本用法,其中formName属性的值是在validation.xml文件的<formset> 中定义的form的名称。有一点值得注意的是在确定<formset>时要使用合 适的language属性值。

<html:javascript 

formName="dataForm"/>
html:xhtml

html:xhtml标签在页面中一出现就是告诉该页 的所有其它的Struts html标签以XHTML1.0兼容的形式输出。这和将html:html标 签的xhtml属性值指定为true有些类似。如果上述情况都没有出现,Struts html 标签将以html4.01兼容的形式输出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值