3

我想根据 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 之前的单词。

4

4 回答 4

7

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

${pageContext.request.requestURI}

(因此返回HttpServletRequest#getRequestURI()

然后,要确定它,您必须使用JSTL 函数 taglib进行一些操作。它提供了几种字符串操作方法,如split(), indexOf(),substringAfter()等。不,没有人支持正则表达式。只需解析它。

开球示例:

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

并将其用作${id}.

于 2010-03-07T05:46:29.050 回答
0

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

在我的 Jsp 中,我得到了:


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

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

于 2010-03-08T20:08:04.857 回答
0

如果我理解正确,我认为您需要执行以下操作:

@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 中使用它。

于 2010-03-08T23:10:27.277 回答
0
/app/(cars|people)/([^/]*)$

carsorpeople放入 backreference 中\1,具体取决于匹配项,以及 backreference 中最后一个斜线的左侧\2

于 2010-03-07T05:38:05.460 回答