铁手剑谱

上善若水
数据加载中……

Struts秘籍之第2段:第3.3式:显示索引属性

第3.3式. 显示索引属性

问题

在一个JSP 页面中,你需要访问一个对象中的索引的属性。

动作要领

使用bean.property[index]来访问索引的值,如Example 3-1所示。

Example 3-1. 访问索引属性

 

<@taglib uri=http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>

<ul>
  
<li><bean:write name="foo" property="bar.baz[0]"/></li>
  
<li><bean:write name="foo" property="bar.baz[1]"/></li>
  
<li><bean:write name="foo" property="bar.baz[2]"/></li>
</ul>

 

JSTL 也支持对索引属性的访问,如Example 3-2 所示。

Example 3-2. 访问索引属性(JSTL)
<@taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

<ul>
  
<li><c:out value="${foo.bar.baz[0]}"/></li>
  
<li><c:out value="${foo.bar.baz[1]}"/></li>
  
<li><c:out value="${foo.bar.baz[1]}"/></li>
</ul>

动作变化

索引的属性是Struts标签中最容易误解的一个部分。一个索引属性是表达一组值的JavaBean 属性,而不是一个单独的标量值。索引属性通过下面格式的getter 方法进行访问:

 

public Foo getSomeProperty (int index)  } 

 

同时,索引属性则通过下面格式的setter 方法进行设置:

 

public void setFoo(int index, Foo someProperty)  } 

 

我们来考虑一个表示日历的JavaBean。CalendarHolder类的代码如Example 3-3 所示,它有一个名为monthSet的嵌套属性,表达日历中的月份。

Example 3-3. Calendar JavaBean

 

package com.oreilly.strutsckbk;

public class CalendarHolder {
    
    
private MonthSet monthSet;

    
public CalendarHolder( ) {
        monthSet 
= new MonthSet( );
    }

    
    
public MonthSet getMonthSet( ) {
        
return monthSet;
    }

}

 

MonthSet类的代码则如Example 3-4 所示,它是一个具有索引属性的类,该属性表达月份的名称("January," "February," 等等)。

Example 3-4. 具有索引属性的类

 

package com.oreilly.strutsckbk;

public class MonthSet {
    
    
static String[] months = new String[] {
            
"January""February""March""April",
              
"May""June""July""August",
              
"September""October""November""December"
    }
;
    
    
public String[] getMonths( ) {
        
return months;
    }


    
public String getMonth(int index) {
        
return months[index];
    }

    
    
public void setMonth(int index, String value) {
        months[index] 
= value;
    }

}

 

我们的目标是访问在JSP页面中访问CalendarHolder实例的monthSet属性的索引属性month,代码片断如下所示:

 

<jsp:useBean id="calendar" class="com.oreilly.strutsckbk.CalendarHolder"/>

<ul>
    
<li><bean:write name="calendar" property="monthSet.months[0]"/></li>
    
<li><bean:write name="calendar" property="monthSet.months[1]"/></li>
    
<li><bean:write name="calendar" property="monthSet.months[2]"/></li>    
</ul>

 

如果显示的索引属性要动态才能决定它是什么,那么使用的索引要使用JSP 脚本变量来进行设置。你可以使用scriptlet 来产生属性值,如下所示:

 

You have selected month number <bean:write name="monthIndex"/>
<bean:write name="calendar" 
        property
='<%= "monthSet.month[" + monthIndex + "]" %>'

 

但是使用scriptlet 会导致极端难以阅读和维护的JSP 页面。如果使用JSTL,事情会变得更清爽一些:

 

You have selected month number <c:out value="${monthIndex}"/>
<c:out value="${calendar.monthSet.month[monthIndex]}"/>

 

通常,索引属性是在一个循环内动态访问的。假设你想要使用Struts logic:iterate标签显示月份的列表。这个标签将在整个Collection 或者数组之上进行迭代。下面是你可以如何以一个排序列表显示所有月份的例子:

 

<ol>
<logic:iterate id="monthName" name="calendar" property="monthSet.months">
    
<li><bean:write name="monthName"/></li>
</logic:iterate>
</ol>

 

重申一下, JSTL 也是一个替代选择。JSTL c:forEach标签将比Struts logic:iterate标签要容易使用一些。下面是如何使用JSTL来产生上面的同一个排序列表的代码:

 

<ol>
<c:forEach var="monthName" items="${calendar.monthSet.months}">
    
<li><c:out name="${monthName}"/></li>
</c:forEach>
</ol>

 

相关动作

第3.4式在JSTL循环中使用索引属性。

第3.5式则提供了一个更加详细的关于在JSTL循环中使用索引属性的说明。

 

posted @ 2005-05-30 10:03 铁手 阅读(1376) | 评论 (1)编辑 收藏
使用 WebSphere Application Server V6 构建企业服务总线

IBM Websphere 中国开发站点有几篇新的Websphere V6中构建ESB的文章,目前已发表3篇:
分别是 :

使用 WebSphere Application Server V6 构建企业服务总线 ——
第1 部分
  WebSphere V6 消息传递资源入门 
第2 部分: 业务需求以及总线
第3部分:  简单的 JMS 消息传递实例

跟踪中.....

posted @ 2005-05-27 15:29 铁手 阅读(985) | 评论 (1)编辑 收藏
Struts秘籍之第2段:第3.2式:使用Struts-EL 标签

第3.2式. 使用Struts-EL 标签

问题

你希望在将JSTL 表达式用作Struts标签的属性值。

动作要领

使用Struts 分发保提供的EL标签库,位于contrib/struts-el/lib目录。你需要将所有JAR 和 TLD 文件拷贝到应用的WEB-INF/lib目录。在需要时用该标签的地方使用下面的taglib指令:

<%@ taglib uri="http://jakarta.apache.org/struts/tags-html-el" prefix="html-el" %>

 

表列出了Struts-EL 标签库和对应的taglib URI。

Table 3-2. Apache Struts Web Framework-EL Taglib URIs

Tag library

Apache Struts Web Framework-EL Taglib URI (1.1)

Apache Struts Web Framework-EL Taglib URI (1.2)

html-el

http://jakarta.apache.org/struts/tags-html-el

http://struts.apache.org/tags-html-el

bean-el

http://jakarta.apache.org/struts/tags-bean-el

http://struts.apache.org/tags-bean-el

logic-el

http://jakarta.apache.org/struts/tags-logic-el

http://struts.apache.org/tags-logic-el

 

动作变化

JSTL风格的表达式,比如${foo.bar[4].baz},并不能够被基本的 Apache Struts Web Framework 标签支持。例如,如果你能够使用下面的方式来格式化一个标签就好了:

 

<html:text value="${sessionScope.foo.bar[3]}"/> 

 

相反,这些标签需要运行时表达式,它们只是Java 代码(JS表达式):

 

<html:text value="<%=session.((Foo)getAttribute("foo")).getBar(3)%>"/> 

 

将Java 代码从 JSP 页面中剔除会使得你的页面更少脆弱性和更容易维护。认识到了这种对EL 支持的缺乏后,因而创建了Apache Struts Web Framework-EL 标签库。这些库扩展了html, bean, and logic Apache Struts Web Framework 标签库,以添加对EL 表达式的支持。如果一个Struts 标签的属性支持一个运行时表达式,对应的Struts-EL 标签便会支持JSTL 表达式。可以在应用中混合使用常规的Struts 标签和Struts-EL 标签,即使在同一个页面中也可以。仅仅是需要保证在页面的taglib指令中为每一个标签库定义一个不同的前缀。

然而,Struts-EL 标签不是JSTL的替代。Struts-EL 标签仅提供仅仅针对Struts的标签。如果Struts 标签可以被一个JSTL 标签所替代,该标签就不会在Struts-EL 标签库中实现。

关于JSP 2.0

如果你使用支持JSP 2.0的容器,比如Tomcat 5,那么你便可以直接在基本Struts 标签中使用JSTL表达式。这就是说,不再需要使用Struts-EL 标签了。JSP 2.0 支持EL 表达式在页面中的直接使用。这些表达式可以用来渲染动态文本,就像原来常规HTML 标记和定制JSP标签中的动态属性值中的文本一样。表达式的值就像是你使用JSTL c:out标签输出的一样:

 

<p>Hello, ${user.firstName}<br /><html:text value="${sessionScope.foo.bar[3]}"/> 

 

为了使用这个强大的特征,你必须是用两种方式之一来激活EL 。如果你使用Servlet 2.4 规范, EL 则默认是支持的。你可以通过你的应用的web.xml文件来区别是不是2.4版本的servlet规范。该文件的开头应该是这样:

 

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"> 

 

如果你使用Version 2.3 或者更早的规范,你将需要在JSP页面的开头使用下面的JSP 指令进行设置:

 

<%@page isELIgnored="false"%> 

 

如果你使用2.4 DTD,那么你不需要设置这个指令;EL 语法将不会被忽略。如果你不确定,尽管可以设置它,这不会发生什么错误问题。

 

相关招式

第3.1式详细描述了如何配置JSTL的使用。

posted @ 2005-05-27 14:29 铁手 阅读(4875) | 评论 (3)编辑 收藏
Struts秘籍之第2段:第3.1式: 使用JSTL

第3.1式. 使用JSTL

问题

你需要在Struts应用中使用JSTL标签苦的标签。

动作要领

http://jakarta.apache.org/taglibs下载Jakarta Taglibs JSTL 的参考实现。将jstl.jar和standard.jar文件拷贝到应用程序的WEB-INF/lib文件夹。然后将c.tld, fmt.tld, sql.tld, 和x.tld文件复制到WEB-INF/lib目录。

在需要时用JSTL的地方使用适当的taglib指令:

 

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 

 

Table 3-1列出了JSTL 标签库和对应的URI。

Table 3-1. JSTL 标签库URI

标签库

JSTL 1.0 Taglib URI

JSTL 1.1 Taglib URI

Core

http://java.sun.com/jstl/core

http://java.sun.com/jsp/jstl/core

Formatting

http://java.sun.com/jstl/fmt

http://java.sun.com/jsp/jstl/fmt

SQL

http://java.sun.com/jstl/sql

http://java.sun.com/jsp/jstl/sql

XML

http://java.sun.com/jstl/xml

http://java.sun.com/jsp/jstl/xml

Functions

N/A

http://java.sun.com/jsp/jstl/functions

 

动作变化

JSTL 是一个强大的标签库集,完全应该作为Struts 开发者的工具箱之一。JSTL 包含有支持JavaBean 属性、循环、条件逻辑、以及URL 格式化的标签。也有格式化和解析日期和数值的标签。XML 标签库可以用来在页面中解析和处理XML。SQL 标签库则可以和关系数据库交互。Functions 标签库提供了一些有功的函数,可用于表达始中,特别是字符串处理。

这其中最重要的就是Core 标签库。这个库包含了很多可以取代Struts beanlogic标签的标签。那为什么要使用这个标签而不是用Struts 标签呢?答案是,这些标签要比Struts 标签要更强大而更易于使用。但是别搞错,Struts 项目并不和它是抵触的。恰恰相反,JSTL 允许Struts 集中于它最擅长的:为强壮的JSP Web应用提供控制器。

我们来看看如何分别使用JSTL 标签和Struts 标签来实现循环和显示输出。首先,下面是Struts 版本:

 

<ul>
    
<logic:iterate id="cust" name="branch" property="customers">
        
<li>
            
<bean:write name="cust" property="lastName"/>
            
<bean:write name="cust" property="firstName"/>
        
</li>
    
</logic:iterate>
</ul>

 

使用JSTL,则变得简单一些:

<ul>
    
<c:forEach var="cust" items="${branch.customers}">
        
<li>
            
<c:out value="${cust.lastName}, ${cust.firstName}"/>
        
</li>
    
</c:forEach>
</ul>


后者最酷的地方在于你并不是一定要一个个的进行选择。JSTL 可以在你便干边学中使用它。JSP 表达式语言(EL) 使得访问各种范围之中的ActionForms 和对象中的数据更加容易。最困难的决策不是你到底用不用JSTL,而是使用哪一个版本的JSTL。如果你使用JSP 2.0/Servlet 2.4 容器,比如Tomcat 5, 你最好使用JSTL 1.1。否则,目前你只能使用JSTL 1.0。

对于Struts应用来说,我们还是推荐使用JSTL 标签。

相关动作

第3.2式会展示如何在Struts标签中使用EL 表达式。

<JavaServer Pages> [Hans Bergsten 著(O'Reilly),机械工业出版中文版]就详细涉及了JSTL,值得参考。

Sun 提供了一个JSTL 教程,地址是http://java.sun.com/tutorials/jstl.

下面地址也有一个快速参考:http://www.jadecove.com/jstl-quick-reference.pdf.

Manning 的 JSTL in Action也是一本很好的书:http://www.manning.com

 

posted @ 2005-05-27 13:57 铁手 阅读(4566) | 评论 (2)编辑 收藏
Java百科:Javapedia

Java.net上有很好的Java相关资源,可以随时跟踪一些相关的技术、组件、项目、框架等等。
其地址是:
http://wiki.java.net/bin/view/Javapedia

其中包括:
 

相关技术:

最佳实践

人物、公司、组织

posted @ 2005-05-25 10:35 铁手 阅读(368) | 评论 (0)编辑 收藏
仅列出标题
共26页: First 上一页 17 18 19 20 21 22 23 24 25 下一页 Last