【问题标题】:Parse request URL in JSTL在 JSTL 中解析请求 URL
【发布时间】:2010-03-06 22:45:36
【问题描述】:

我想根据 JSP 上的 URL 请求显示特定消息。

请求的 URL 可以是:

/app/cars/{id}

/app/people/{id}

在我的messages.properties 我有:

events.action.cars=My car {0} event
events.action.people=My person {1} event

最后,在我的 JSP 页面上,我想要以下代码:

<spring:message code="events.${element.cause}.${?????}"
                arguments="${element.param['0']},${element.param['1']}"/>

我需要帮助确定我可以使用哪个表达式来解析请求 URL 并获取 ID 之前的单词。

【问题讨论】:

    标签: regex spring jstl url-parsing


    【解决方案1】:

    你可以在JSTL中访问请求URI(实际上是:EL),如下:

    ${pageContext.request.requestURI}
    

    (因此返回HttpServletRequest#getRequestURI()

    然后,要确定它,您将不得不与JSTL functions taglib 玩一点。它提供了几种字符串操作方法,如split()indexOf()substringAfter() 等。不,没有人支持正则表达式。只需解析它。

    启动示例:

    <c:set var="pathinfo" value="${fn:split(pageContext.request.requestURI, '/')}" />
    <c:set var="id" value="${pathinfo[pathinfo.length - 1]}" />
    

    并将其用作${id}

    【讨论】:

    • 我想提问者想知道在斯普林斯怎么做。
    • @精英绅士:JSTL 已被明确标记和提及。不过,欢迎您发布针对 Spring 的答案。如果它可以在春天完成:)
    • 对不起,我还没有看到标签... +1 和你的答案:-)
    【解决方案2】:
    /app/(cars|people)/([^/]*)$
    

    carspeople 放入反向引用\1,具体取决于匹配项,以及反向引用\2 中最后一个斜线的左侧。

    【讨论】:

    • JSTL 没有任何正则表达式风格的函数。
    【解决方案3】:

    到目前为止,我的解决方案是拥有一个与正则表达式 ".?/jsp/(\w+)/..jsp" 匹配的 RequestUtils 类并返回该组(1).

    在我的 Jsp 中我得到了:

    
    <% request.setAttribute("entity", RequestUtils.getEntityURI(request)); %>
    <spring:message code="events.${element.cause}.${entity}"
                    arguments="${element.param['0']},${element.param['1']}"/>
    

    这当然成功了。但在 JSP 中最好不要有任何 Java 代码。

    【讨论】:

      【解决方案4】:

      如果我理解正确,我认为你需要这样做:

      @RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
      public String findOwner(@PathVariable String ownerId, Model model) {
        model.addAttribute("ownerId", ownerId);  
        return "myview"; 
      }
      

      如您所见,这里的 ownerId 是 Spring MVC 从 URL 中读取的。之后,您只需将变量放入模型映射中,以便在您的 JSP 中使用它。

      【讨论】:

      • 不是真的在春天,我有一个控制器来显示汽车或人。在这些视图中的每一个上, 弹簧消息的格式对于每个实体都不同。比如 events.activate.cars=car 已激活和 events.activate.people=Person 已激活。
      猜你喜欢
      • 2013-12-03
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多