我有一个bean变量说url
从db获取它的值,它也可以在db中传递给它的动态参数。假设一个基本网址是https://test.com/myapp.action
,它也可以是https://test.com/myapp.action?userid=${user.userId}
(传递动态参数),其中user.userId
是另一个bean变量,现在这个url
bean变量放在一个像这样的jsp
<a href="${url}"></a>
问题是它在DOM中解析为https://test.com/myapp.action?userid=${user.userId}
,但如果服务器会话中https://test.com/myapp.action?userid=myuser
,我希望将其解析为user.userId="myuser"
。
答案 0 :(得分:0)
您可以对servlet中的url进行一些处理,并解析嵌入的表达式 我只使用JSP进行演示。 这不是一般解决方案。它只适用于这种情况。它不会以其他方式与多个级联EL /占位符一起使用。
代码的作用基本上是
${
和}
分割部分网址,守则:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP EL resolver</title>
</head>
<body>
<%
session.setAttribute("user.userId", "myuser");
pageContext.setAttribute("url", "https://test.com/myapp.action?userid=${user.userId}");
%>
url before preparation: <a href="${url}">${url}</a><br>
<%
String url = (String) pageContext.getAttribute("url");
String[] parts = url.split("\\$\\{|\\}");
String newUrl = parts[0];
String userEL = parts[1];
String sessionUser = session.getAttribute(userEL).toString();
pageContext.setAttribute("url", newUrl + sessionUser);
%>
url after preparation: <a href="${url}">${url}</a><br>
</body>
</html>
输出:
url before preparation: https://test.com/myapp.action?userid=${user.userId}
url after preparation: https://test.com/myapp.action?userid=myuser
这是一个解决方案,但是很脏。
更好的解决方案是:
好处将是: