在 清单 1 中,前几行设置将在页面中处于活动状态的标记库。它们还将站点模板的内容区域设置为内容将显示的位置。本例展示了一个简单的基于 Struts 的输入屏幕,它用一些 标记来显示资源库文件(位于 webapp/WEB-INF/classes/resources/application.properties)中的字符串。屏幕将名称和电话号码提交给名为 SaveEntry.do 的 Struts 动作。
如果查看 清单 2 中 SaveEntry.java 源文件中的类 Javadoc 标记,将会看到该应用程序中 XDoclet 标记的第一个示例。这些标记定义生成 Struts 部署描述符 struts-config.xml 必需的所有属性。
清单 2. SaveEntry.java Javadoc 类标记
/**
* Save an Entry
*
* @struts.action
* name = "phoneBookEntryForm"
* path = "/pages/SaveEntry"
* scope = "request"
* input = "/pages/EditPhoneNumberPage.jsp"
* unknown = "false"
* validate = "false"
* @struts.action-forward
* name = "success"
* path = "/pages/ListNumbers.do"
* redirect = "true"
*/
该示例代码位于一个 nutshell 中,展示了 /pages/SaveEntry 动作从 EditPhoneNumberPage.jsp 中获取输入,并使用 phoneBookEntryForm 将来自页面的用户输入打包到 Java 代码中。该动作完成之后,它重定向到 /pages/ListNumbers 动作以显示号码列表。
ListNumbers 动作位于 ListNumbers.java 文件中,它使用 清单 3 中的代码调用名为 PhoneBookSession 的 Session EJB。
清单 3. ListNumbers 动作的 execute() 方法的代码段
PhoneBookSessionLocal session =
PhoneBookSessionUtil.getLocalHome().create();
// Call the method
Collection c = session.listEntries();
// Put the retrieved information into the request attributes
// so the page can render them.
request.setAttribute("numbers", c);
在 清单 3 中,可以看到 PhoneBookSessionUtil 类的使用。它是一个 XDoclet 生成的类,用于帮助获得 PhoneBookSession 对象的主接口。创建了一个会话,调用了它的 listEntries() 方法,该方法返回所有电话簿条目的集合。然后请求对象中的 numbers 属性被设置为该集合。这样做的效果是将电话号码放到指定位置,以便用于显示条目的 JSP 可以检索并写出列表,如 清单 4 所示。
清单 4. ListPhoneNumbersPage.jsp 中的 DisplayTag
<display:table name="numbers" requestURI="ListNumbers.do"
scope="request" pagesize="5" id="row_obj">
<display:column property="name" title="Name"/>
<display:column property="phoneNumber" title="Phone"/>
<display:column title="Actions">
<logic:present name="row_obj">
<html:link action="/pages/EditEntry"
paramId="id" paramName="row_obj"
paramProperty="name">Edit</html:link>
<html:link action="/pages/DeleteEntry"
paramId="id" paramName="row_obj"
paramProperty="name"
onclick="return confirmDelete('Number')">
Delete
</html:link>
</logic:present>
</display:column>
...
</display:table>
