我想根据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之前的单词。
答案 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)/([^/]*)$
会将cars
或people
置于反引用\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中使用它。