2012-02-28 1 views
0

맞춤 태그를 만들려면 jstl을 사용하고 있습니다. 나는 위치 태그를 사용하고 여기에jstl 맞춤 태그 질문 - c : 출력 무시, 매개 변수 태그 지정 및 코드 줄이기

<%@ 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> 

: 요소의 생성 된 ID가 접두사 <c:out value="${param.id}" />을 가지고하지 않는 몇 가지 이유를 들어

<h:location id="a" locationType="ADDRESS"></h:location> 
<h:location id="b"></h:location> 
  1. 여기 location.tag의 내용이다. 예를 들어, location.tag에서 나는 <input type="text" id="<c:out value="${param.id}" />_addressHouseNumberInput"/>을 작성했지만 사용법의 결과는 <input type="text" id="_addressHouseNumberInput"/> (c:out을 무시합니다.) 무엇이 잘못 되었습니까?
  2. 두 가지 사용법 모두에 대해 html 결과는 동일하지 않습니다. 매개 변수 locationType에 인식되는 이유가 여기에 코드 중복을 많이 가지고
  3. 예를 들어, 모든 ID 접두사 점이다.?.. <c:out value="${param.id}" /> 코드의 양을 줄일 수있는 방법이 있나요

답변

0

param? 변수에는 jsp로 전달 된 클라이언트 요청 매개 변수의 암시 적으로 작성된 맵이 있습니다. 태그 파일에 정의 된 속성은 사용할 수 있습니다. 접두사가 없으므로

<c:out value="${id}" /> 

으로 올바른 값을 출력해야합니다.

지원되는 jsp 버전이 2.0 이상인 경우 c:out 태그를 생략하고 텍스트 또는 attributess에 직접 el 표현식을 사용할 수도 있습니다. 값의 xml 이스케이프가 필요한 경우 c:out이 필요하지만 id 값을 제어하는 ​​것처럼 보이므로 문제가되지 않습니다.

+0

엘 식은 무엇입니까? – Naor

+0

@Naor : EL = 표현식 언어. JSP 2.0 이후로 JSP 표준의 일부이며 페이지에서 직접 사용할 수 있으므로'c : out'을 생략하고'$ {id} '를 사용할 수 있습니다. –