[英]How can I reuse code in JSP?
例如,用戶將在整個應用程序中呈現為
<div class="user">
<p class="username">${user.name}</p>
<p class="karma">${user.karma}</p>
<img src="/users/${user.id}"/>
</div>
如何重用此代碼塊?
注意 - 我的代碼在一個標記內運行,所以我不能為此(或任何JSP)使用標記,否則我得到一個Scripting elements are disallowed here
錯誤。
編輯
我正在嘗試使用標記文件,但獲取PropertyNotFoundException。
這是我的名為'user.tag'的標簽文件:
<%@tag description="User" pageEncoding="UTF-8" %>
<a href="../user/showUser.do?userId=${user.id}">
<p>${user.name}</p>
<img class='avatar' src='${user.avatarUrl}' alt=""/>
</a>
並在jsp中使用:
job.poster是一個帶有id
, name
和avatarUrl
屬性的java bean。 如果我加
<%@attribute name="user" %>
到標簽文件,然后我得到一個例外
Property 'id' not found on type java.lang.String
從JSP 2.0開始,還有另一種標簽:標簽文件。 標記文件是作為JSP模板本身編寫的JSP自定義標記,這似乎是您想要的。
http://fforw.de/post/creating-jsp-layouts-with-page-tags/顯示了如何使用這樣的標記文件作為一般布局解決方案。 使用它們作為組件應該更容易。
您應該能夠在標記文件中使用標記文件; 這適用於JSP 2.2容器:
<%-- mytag.tag --%>
<%@tag description="demo code" pageEncoding="UTF-8"%>
<%@taglib prefix="cust" tagdir="/WEB-INF/tags" %>
<%@attribute name="message"%>
<cust:mytag2 message="${message}" /><%-- uses mytag2.tag --%>
如果失敗,您可以使用include指令: <%@include file="/WEB-INF/jspf/fragment.jspf" %>
請注意,規范說明了標簽:
Directive Available? Interpretation/Restrictions
======================================================================
page no A tag file is not a page. The tag directive must
be used instead. If this directive is used in a
tag file, a translation error must result.
因此, fragment.jspf
不得包含標記中不支持的任何元素,包括page
指令。
對於您給出的示例,聽起來需要一些模板框架,以在每個屏幕上顯示用戶徽章。 在最簡單的層面上,這可能只是一個jsp:include,它總是包含你的“UserBadge.jsp”。
如果您在Web框架上運行,例如JSF,您可以使用Facelet模板或為此編寫自定義組件。 所以答案取決於你擁有的框架。 將其分解為JSP和JSTL - 包含的JSP或javax.servlet.jsp.tagext.Tag肯定會減少重復。
要小心遵循干燥原則......不要重復自己!
我覺得有時創建一個.tag文件是過度的(特別是如果它只用於一頁),而且我想要你多年來所描述的內容,所以我編寫了我自己的簡單解決方案。 請參見此處: https : //stackoverflow.com/a/25575120/1607642
為什么不使用自定義標記或jsp函數。
謝謝,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.