解析 JSTL 中的请求 URL

发布于 2024-08-23 16:39:02 字数 541 浏览 9 评论 0原文

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

I want to display a specific message based on the URL request on a JSP.

the request URL can be:

/app/cars/{id}

OR

/app/people/{id}

On my messages.properties I've got:

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

Finally, on my JSP page I want to have the following code:

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

I need help figuring out which expression I could use to parse the request URL and obtain the word before the ID.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

回忆凄美了谁 2024-08-30 16:39:02

您可以按如下方式访问 JSTL 中的请求 URI(实际上:EL):(

${pageContext.request.requestURI}

因此返回 HttpServletRequest#getRequestURI())

然后,要确定它,您必须使用 JSTL 函数标签库。它提供了多种字符串操作方法,例如 split()indexOf()substringAfter() 等。不,没有人支持正则表达式。解析一下就可以了

启动示例:

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

并将其用作 ${id}

You can access the request URI in JSTL (actually: EL) as follows:

${pageContext.request.requestURI}

(which thus returns HttpServletRequest#getRequestURI())

Then, to determine it, you'll have to play a bit round with JSTL functions taglib. It offers several string manipulation methods like split(), indexOf(), substringAfter(), etc. No, no one supports regex. Just parse it.

Kickoff example:

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

And use it as ${id}.

迎风吟唱 2024-08-30 16:39:02
/app/(cars|people)/([^/]*)$

将把 carspeople 放入反向引用 \1 中,具体取决于匹配情况,以及反向引用 中最后一个斜杠左边的内容\2

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

will put cars or people in backreference \1, depending on the match, and whatever is left right of the last slash in backreference \2.

烟雨扶苏 2024-08-30 16:39:02

到目前为止,我的解决方案是拥有一个与正则表达式 ".?/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 代码。

My solution so far is to have a RequestUtils class that match the regex ".?/jsp/(\w+)/..jsp" and return the group(1).

in my Jsp I got:


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

this of course did the trick. But still it would be better not to have any Java code within the JSP.

醉生梦死 2024-08-30 16:39:02

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

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

If I understand you correctly, I think you need to do something like this:

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

As you can see, here the ownerId is read from the URL by Spring MVC. After that, you simply put the variable in the Model map so you can use it in your JSP.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文