• [工作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的研究,以后要记得改进。

      

      

      

  • 相关阅读:
    equals标准写法
    抽象类的概述
    多态的弊端
    多态
    final关键字
    java 静态代码块 构造块 构造方法
    java 工具类
    逻辑运算符&&和&的区别 ||和|的区别
    react-route
    跨域
  • 原文地址:https://www.cnblogs.com/jyyzzjl/p/5167848.html
Copyright © 2020-2023  润新知