[工作bug]c:import参数传递问题解析

一、起因:

  在项目的工厂中,由于某个界面根据产品种类显示的产品属性均不相同,所以决定将界面进行拆分,将每一个产品写入一个jsp界面,分别命名为product0.jsp、product1.jsp,在主界面根据产品id,分别用<c:import>标签引入对应的界面即可。

  这样做的好处是:将可变得界面进行解耦之后,如果增加一个产品,仅需增加一个界面即可,不会影响到其他界面的元素,便于横向扩展,减少了原来主界面的代码量,提升了维护性。

  因为引入界面时候,有一个参数需要传递到被引入界面,却引发了个小小的疑问,经过查找,最终解决了,此处记录解决经历,以备以后参考。

二、问题描述

  jsp界面中引入界面有:

  1、<c:import url="inlayingJsp.jsp"></c:import>  

  2、<%@ include file="inlayingJsp.jsp" %>  

  3、<jsp:include   page="inlayingJsp.jsp" flush="true"/> 

  我的工作中,主要使用jstl进行编辑jsp界面,所以选择第一种。如果网被引入界面传递参数,第一反应是如下写法

<c:import url="inlayingJsp.jsp?opType=edit"></c:import>  

  可是在子界面以${opType},取值为空。

  怀疑是否没有传递过来,查了下标签的使用方法,将参数的传递方法改为

<c:import url="inlayingJsp.jsp">
    <c:param name="opType" value="edit"/>
</c:import> 

  这是标准的jstl的传递参数写法,但是很不幸,仍然无法取到值。

  接着研究了下标签,发现其他参数,比如var,可是尝试后还是不行。

  在网上看到有一篇文章,将百度引为子页,语法为:

<c:import url="https://www.baidu.com/s">
    <c:param name="wd" value="搜索内容"/>
</c:import> 

  试了下,子页不但显示了百度,而且确实进入了搜索界面。于是考虑之前子页获取参数的方法是否有误。

  试了下标准的jsp写法,可以正确获取到值:  

<% 
    String opType=request.getParameter("opType");
    out.print(opType);
%>

  问题锁定为el表达式有问题,继续google之,正确写法为:

${param.opType}

三、结论

  问题其实很小,但也花了快一个小时,回想起来主要是一直使用jstl进行界面编写,缺乏对原生jsp的研究,以后要记得改进。

  

  

  

posted @ 2016-01-29 00:40  孤子  阅读(4461)  评论(0编辑  收藏  举报