0
我正在使用jstl來創建自定義標記。這裏是location.tag的內容:jstl自定義標記問題 - 忽略c:out,標記參數並減少代碼
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ attribute name="id" required="true" %>
<%@ attribute name="locationType" required="false" %>
<br/>
<c:out value="${param.id}" /> <---THIS ALWAYS PRINTS NOTHING! WHY?
<br/>
<c:out value="${param.locationType}" /> <---THIS ALWAYS PRINTS NOTHING! WHY?
<br/>
<c:if test="${empty param.locationType}" >
<select id="<c:out value="${param.id}" />_locationTypeSelect">
<option value="ADDRESS">כתובת</option>
<option value="INSTITUTE">מוסד</option>
</select>
<script type="text/javascript">
$(document).ready(function() {
$('<c:out value="${param.id}" />_locationTypeSelect').change(function() {
switch($(this).val()) {
case 'ADDRESS':
$('<c:out value="${param.id}" />_addressCitySelect').show();
$('<c:out value="${param.id}" />_addressStreetSelect').show();
$('<c:out value="${param.id}" />_addressHouseNumberInput').show();
$('<c:out value="${param.id}" />_instituteNameSelect').hide();
$('<c:out value="${param.id}" />_instituteBranchSelect').hide();
break;
case 'INSTITUTE':
$('<c:out value="${param.id}" />_addressCitySelect').hide();
$('<c:out value="${param.id}" />_addressStreetSelect').hide();
$('<c:out value="${param.id}" />_addressHouseNumberInput').hide();
$('<c:out value="${param.id}" />_instituteNameSelect').show();
$('<c:out value="${param.id}" />_instituteBranchSelect').show();
break;
}
});
});
</script>
</c:if>
<c:if test="${empty param.locationType or param.locationType == 'ADDRESS'}" >
<select id="<c:out value="${param.id}" />_addressCitySelect"></select>
<select id="<c:out value="${param.id}" />_addressStreetSelect"></select>
<input type="text" id="<c:out value="${param.id}" />_addressHouseNumberInput"/>
</c:if>
<c:if test="${empty param.locationType or param.locationType == 'INSTITUTE'}" >
<select id="<c:out value="${param.id}" />_instituteNameSelect"></select>
<select id="<c:out value="${param.id}" />_instituteBranchSelect"></select>
</c:if>
這裏我使用了位置標籤:
<h:location id="a" locationType="ADDRESS"></h:location>
<h:location id="b"></h:location>
- 因爲某些原因元素生成的ID不具有前綴
<c:out value="${param.id}" />
。例如,在location.tag中,我寫了<input type="text" id="<c:out value="${param.id}" />_addressHouseNumberInput"/>
,但是這兩個用法的結果是:<input type="text" id="_addressHouseNumberInput"/>
(它忽略了c:out
。什麼錯誤? - 對於這兩種用法,html結果是相同的,就好像它沒有識別參數的locationType爲什麼是
- 我有很多在這裏重複代碼。例如,所有的ID前綴:?。
<c:out value="${param.id}" />
有沒有什麼辦法來減少代碼量
什麼是el表達式? – Naor 2012-02-29 18:36:31
@Naor:EL =表達式語言,因爲JSP 2.0是JSP標準的一部分,可以直接在頁面中使用,所以可以省略'c:out'並使用'$ {id}'。 – 2012-02-29 19:22:15