简化 Ajax 和 Java 开发,第 2 部分: 使用约定最小化设置和配置
http://tech.ddvip.com 2008年06月12日 社区交流
内容摘要:本文将展示如何使用 JSP 标准标记库(JSTL)和 JSP 标记文件实现数据绑定、页面导航和样式约定,从而简化开发和维护。您将了解如何构建带有动态属性的定制 JSP 标记,使快速更改应用程序变得更加容易。此外,本文最后一节包含了一个使用 Ajax 提交 Web 表单的示例。
前一节展示了 <df:textarea> 组件,该组件使用 JSTL 生成与 JavaBean 属性绑定的 <textarea> 元素。如果想要构建额外的 Web 组件,最好把公共的代码片段放到可重用的标记文件中。
输出动态属性的 <c:forEach> 循环可以移动到一个名为 attrList.tag 的独立标记文件中(参见 清单 6)。除了使代码更加紧凑,此更改还允许您实现对所有组件都有用的特性,比如将默认样式类添加到 HTML 标记。
attrList.tag 声明一个名为 tag 的属性,该属性和 skin 参数结合起来构建包含在 class 属性内部的类名称。<c:forEach> 属性输出给定的 map 包含的所有属性,但 class 属性除外,它是在循环之后添加。
清单 6. attrList.tag 文件
<%@ attribute name="tag" required="true" rtexprvalue="true" %>
<%@ attribute name="map" required="true" rtexprvalue="true"
type="java.util.Map" %>
<%@ tag body-content="empty" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:if test="${!empty initParam.skin}">
<c:set var="classAttr" value="${initParam.skin}_${tag}"/>
</c:if>
<c:forEach var="attr" items="${map}">
<c:if test="${attr.key != 'class'}">
${attr.key}="${fn:escapeXml(attr.value)}"
</c:if>
<c:if test="${attr.key == 'class'}">
<c:set var="classAttr" value="${classAttr} ${attr.value}"/>
</c:if>
</c:forEach>
<c:if test="${!empty classAttr}">
class="${fn:escapeXml(classAttr)}"
</c:if>
来源:ibm 作者:Andrei Cioroianu 责编:豆豆技术应用