2012-08-30 39 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> 
    

希望这给一些方向。