【问题标题】:Create reusable GUI components in Spring在 Spring 中创建可重用的 GUI 组件
【发布时间】:2016-02-06 18:49:15
【问题描述】:

我有一个使用Spring MVC 的项目,我最近在我的页面上添加了Apache Tiles 的使用。但我是model Book 我必须在很多不同的页面上显示。我可以在Spring 中以某种方式定义一本书GUI Component。我想要这样的东西:

A GUI Component 我可以这样定义: book.viewcomponent

<h1>${book.title}</h1>
<span>${book.summary}</span>

通过传递model 对象使用此组件的第一页 booklist.jsp

<!--some import to let me insert with prefix:"insert"-->
<html>
<head>...</head>
<body>
<insert page="book.jsp" model="${book}">
</body>
</html>

通过传递model 对象来使用此组件的第二个页面 morebooks.jsp

<!--some import to let me insert with prefix:"insert"-->
<html>
<head>...</head>
<body>
<insert page="book.jsp" model="${book}">
</body>
</html>

【问题讨论】:

    标签: java spring jsp spring-mvc tiles


    【解决方案1】:

    我认为您可以使用包含或标签来做到这一点。包括:

    <!-- There's a book in the request -->
    <jsp:include page="book.jsp" />
    

    在这种情况下,如果您的 book.jsp 文件中有 ${book.title} 之类的内容,那么在包含您的片段之前,请求中必须有一个名为“book”的 Book 对象。

    使用标签,会更正式一点。您需要将标签连同其参数定义一起写入文件中。以下将是您的book.tagx 标签,例如WEB-INF/tags/mytags

    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
      <jsp:directive.attribute name="book" type="your.package.Book" required="true" />
      <h1>${book.title}</h1>
      <span>${book.summary}</span>
    </jsp:root>
    

    然后您可以导入此标签,添加引用您保存它的位置的命名空间:

    xmlns:mytags="urn:jsptagdir:/WEB-INF/tags/mytags"
    

    最后使用它:

    <mytags:book book="${book}" />
    

    如您所见,这里参数是传递给标签的,而不是在请求中隐式传递。

    更多关于创建标签的信息:https://docs.oracle.com/cd/E19316-01/819-3669/6n5sg7b5m/index.html

    【讨论】:

    • 很有帮助,但不是很优雅的解决方案。我必须在 doTag() 方法中加载 book.viewcomponent 并自己替换 ${book.title} 等值。听起来不值得麻烦
    • 对不起,我给你错误的链接。我指的是纯 JSP 标记而不是 java 代码标记(使用 doTag() 方法的标记)。我已经更新了答案,更详细地解释了这个标签的含义。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2016-12-24
    • 2014-08-26
    • 2016-03-10
    • 2023-03-20
    • 2018-09-24
    • 2017-12-06
    相关资源
    最近更新 更多