简化 Ajax 和 Java 开发,第 2 部分: 使用约定最小化设置和配置
http://tech.ddvip.com 2008年06月12日 社区交流
内容摘要:本文将展示如何使用 JSP 标准标记库(JSTL)和 JSP 标记文件实现数据绑定、页面导航和样式约定,从而简化开发和维护。您将了解如何构建带有动态属性的定制 JSP 标记,使快速更改应用程序变得更加容易。此外,本文最后一节包含了一个使用 Ajax 提交 Web 表单的示例。
当用户单击 Submit 按钮时,Web 浏览器将用户的输入发回给相同的页面,因为 <form> 元素没有 action 属性。然后,应用服务器执行 JSP 页面,该页面使用 JSTL 标记 <c:set> 将 address 参数的值存储到 dataModel bean 中。
构建 <df:textarea> 组件
如果比较清单 1 和清单 3,您将会注意到,JSF 页面仅使用了一行代码来定义文本区域组件,而基于 JSTL 的页面需要 5 行代码来将 <textarea> 元素绑定到 JavaBean 属性。通过将 JSTL 代码移动到输出 <textarea> 元素的可重用标记文件中,就可以 将此代码片段缩减为一行。
textarea.tag 文件(见清单 4)仅声明用于数据绑定约定的 name 属性(表单元素和带有该元素的值的 JavaBean 属性必需具有相同的名称)。任何其他属性(比如 rows 或 cols)都将存储在一个 Map 对象中,该对象的 dynAttr 标识符由 <%@tag%> 指令的 dynamic-attributes 属性来指定。这些属性在一个受 JSTL 标记 <c:forEach> 控制的循环中输出。任何 "、&、< 和 > 字符都被 JSTL 函数 fn:escapeXml() 使用 "、&、< 和 > 替换。
清单 4. textarea.tag 文件
<%@ attribute name="name" required="true" rtexprvalue="true" %>
<%@ tag dynamic-attributes="dynAttr" body-content="scriptless" %>
<%@ 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="${pageContext.request.method == 'POST' && !empty param[name]}">
<c:set target="${dataModel}" property="${name}" value="${param[name]}"/>
</c:if>
<textarea name="${name}"
<c:forEach var="attr" items="${dynAttr}">
${attr.key}="${fn:escapeXml(attr.value)}"
</c:forEach>
><c:out value="${dataModel[name]}"/></textarea>
来源:ibm 作者:Andrei Cioroianu 责编:豆豆技术应用