我有一个bean变量,比如url,它从db获取值,也可以在db中传递给它一个动态参数。假设一个基本url是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},但如果在服务器会话中为user.userId="myuser",我希望它解析为https://test.com/myapp.action?userid=myuser。
发布于 2016-12-07 08:22:43
您可以在servlet中对url进行一些处理,并解析嵌入的表达式。
我使用JSP只是为了演示。这不是一个通用的解决方案。它只适用于这种情况。它不能以其他方式与多个或级联EL/占位符一起工作。
代码所做的,基本上是
${和}将url拆分为多个部分,解析嵌入的url新的url
代码:
<%@ 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这是一个解决方案,但也是一个糟糕的解决方案。
更好的解决方案将是:
在DB或Property-File
的好处是:
https://stackoverflow.com/questions/41001804
复制相似问题