2012-02-28 7 views
0

カスタムタグを作成するためにjstlを使用しています。私は、ロケーションタグを使用しています。ここjstlカスタムタグの質問 - c:out、タグパラメータ、reduceコードを無視する

<%@ 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に渡されたクライアント要求パラメータの暗黙的に作成されたマップがあります。タグファイルに定義されている属性は、w任意の接頭辞がないので、使用する

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

正しい値を出力するのに十分なはずです。

サポートされているjspバージョンが2.0以上の場合は、c:outタグを省略して、テキストまたは属性なしで直接el式を使用することもできます。値のxmlエスケープが必要な場合はc:outが必要ですが、idの値を制御しているように見えるので問題にはなりません。

+0

el式とは何ですか? – Naor

+0

@Naor:EL =式言語、JSP 2.0以降はJSP標準の一部であり、ページで直接使用できるので、 'c:out'を省略して' $ {id} 'だけを使うことができます。 –

関連する問題