2012-08-30 173 views
1

我想包含一個帶有動態參數的文件。這些參數來自一個數組。我可以在<jsp:include>標籤體內使用JSTL標籤

這是我寫的代碼:

<jsp:include page="${jspName}"> 
    <c:if test="${paramList != null}"> 
     <c:forEach var="paramPair" items="${paramList().getList()}"> 
      <jsp:param name="${paramPair.getName()}" value="${paramPair.getValue()"/> 
     </c:forEach> 
    </c:if> 
</jsp:include> 

但是這給了我一個錯誤:

Expecting "jsp:param" standard action with "name" and "value" attributes. 

是否有人可以幫助我弄清楚如何我可以從動態發送這些參數的文件參數數組?

回答

1

不能包括<jsp:include>標籤的體內任何表達或JSTL標記,你只能有體內<jsp:param>標籤,按照該JSP documentation

要了解你的需求比較好,請回答這個問題:
由於參數的名稱也是動態的,你怎麼想獲得通過${jspName}代表的JSP文件中這些參數?


不過這裏有一些我的建議:
我建議設計的反思,並使用include指令(<%@ include file="myJsp.jsp" %>),而不是標準動作。

或者

如果你想使用<jsp:include>那麼你做任何以下的:

  • 傳遞兩個<jsp:param>;一個用逗號分隔的name列表(name1,name2,name3)和其他用逗號分隔的value列表(value1,value2,0 value3)。在你包含的jsp ${jspName}中,做一些簡單的字符串操作來獲取名稱和值。

    <c:set name="nameList" value="" /> 
    <c:set name="valueList" value="" /> 
    
    <c:if test="${paramList != null}"> 
        <c:forEach var="paramPair" items="${paramList().getList()}"> 
         <c:set name="nameList">${nameList},${paramPair.getName()},</c:set> 
         <c:set name="valueList">${valueList},${paramPair.getValue()},</c:set> 
        </c:forEach> 
    </c:if> 
    
    <jsp:include page="${jspName}"> 
        <jsp:param name="nameListToBePassed" value="${nameList}" /> 
        <jsp:param name="valueListToBePassed" value="${valueList}" /> 
    </jsp:include> 
    
  • 傳遞一個<jsp:param>用逗號分隔nameValue列表像[name1=value1,name2=value2,name3=value3]

    <c:set name="nameValueList" value="" /> 
    
    <c:if test="${paramList != null}"> 
        <c:forEach var="paramPair" items="${paramList().getList()}"> 
         <c:set name="nameValueList">${nameValueList},${paramPair.getName()}=${paramPair.getValue()},</c:set> 
        </c:forEach> 
    </c:if> 
    
    <jsp:include page="${jspName}"> 
        <jsp:param name="nameValueListToBePassed" value="${nameValueList}" /> 
    </jsp:include> 
    

希望這給一些方向。