在JSTL中解析请求URL

时间:2010-03-06 22:45:37

标签: regex spring jstl url-parsing

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

请求网址可以是:

/app/cars/{id}

OR

/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之前的单词。

4 个答案:

答案 0 :(得分:7)

您可以按如下方式访问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}

答案 1 :(得分:0)

/app/(cars|people)/([^/]*)$

会将carspeople置于反引用\1中,具体取决于匹配,以及反引用\2中最后一个斜杠的左侧。

答案 2 :(得分:0)

到目前为止我的解决方案是让RequestUtils类与正则表达式“。?/ jsp /(\ w +)/。 .jsp”匹配并返回组(1)。

在我的Jsp中我得到了:


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

这当然是诀窍。但是最好不要在JSP中使用任何Java代码。

答案 3 :(得分:0)

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

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

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