【问题标题】:JSP Component CreationJSP 组件创建
【发布时间】:2010-06-16 13:59:07
【问题描述】:

在创建 JSP 页面时,我经常喜欢的一件事是能够执行以下操作:

<jsp:include page="fancystoryrenderer.jsp" value="${aStoryObjectInMyModel}/>

...

fancystoryrenderer.jsp

<div id="fancymainbody">
    ...
    ${theStory.title}
    ...
</div>

这样做的主要重要特征是我可以在不同的地方在同一个 JSP 页面上重用相同的组件,而不必复制粘贴组件并给故事变量不同的名称,注意故事在JSP 而不是“aStoryObjectInMyModel”,我们的模型之间的联系已经被视图破坏了,这在这种情况下是一件好事。另外,我知道您可以将参数传递给 JSP 视图,但我根本不想从请求对象中获取属性,我希望能够使用表达式语言中的参数。

你是怎么做到的?

我正在使用 Spring-MVC 和 JSP,请不要添加任何框架,我有兴趣仅使用我目前拥有的 Web 堆栈来使其工作。

【问题讨论】:

    标签: java jsp spring-mvc


    【解决方案1】:

    将所需的模型放在请求(或更广泛)范围内,它会在不“传递”它的情况下正常工作。

    如果这种需求背后的实际移动是因为您将页面包含在其中,例如 JSTL c:forEach 循环(它将当前迭代的项目置于本地范围内,而包含的 JSP 页面确实无法访问),那么您可以使用c:set来设置。

    <c:forEach items="${items}" var="item">
        <c:set var="currentitem" value="${item}" scope="request" />
        <jsp:include page="include.jsp" />
    </c:forEach>
    

    include.jsp:

    <p>Current item: ${currentitem}</p>
    

    它会起作用的:)

    【讨论】:

      【解决方案2】:

      这可以是使用所谓的“标签文件”的档案。标记文件基本上是放在 WEB-INF/tags 下的 jsps,然后可以像 taglib 一样使用。我在本例中使用的是 xml 语法,但它也应该适用于较旧的语法。

      /WEB-INF/tags/mytag.jspx

      <?xml version='1.0' encoding='utf-8'?>
      <jsp:root version="2.1" xmlns:jsp="http://java.sun.com/JSP/Page">
          <jsp:directive.attribute name="mybean" required="true" rtexprvalue="true" type="mypackage.MyBean"/>
          <div>
             ${mybean.myproperty}
          </div>
      </jsp:root>
      

      test.jspx

      <?xml version='1.0' encoding='utf-8'?>
      <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:tags="urn:jsptagdir:/WEB-INF/tags/">
          <jsp:directive.page contentType="text/html; charset=utf-8"/>
          <div>
            <tags:mytag mybean="${mymodel.mybean}"/>
          </div>
      </jsp:root>
      

      您可能还需要 WEB-INF/tags 中的文件 implicit.tld 来设置 taglib 版本:

      <?xml version='1.0' encoding='utf-8'?>
      <taglib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
          version="2.1" xmlns="http://java.sun.com/xml/ns/javaee">
          <tlib-version>2.1</tlib-version>
      </taglib>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多