首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSP EL中解析JSP EL

在JSP EL中解析JSP EL
EN

Stack Overflow用户
提问于 2016-12-07 01:55:00
回答 1查看 52关注 0票数 0

我有一个bean变量,比如url,它从db获取值,也可以在db中传递给它一个动态参数。假设一个基本url是https://test.com/myapp.action,它也可以是https://test.com/myapp.action?userid=${user.userId} (通过传递动态参数),其中user.userId是另一个bean变量,现在这个url bean变量被放在一个jsp中,如下所示

代码语言:javascript
复制
<a href="${url}"></a>

问题是它在DOM中解析为https://test.com/myapp.action?userid=${user.userId},但如果在服务器会话中为user.userId="myuser",我希望它解析为https://test.com/myapp.action?userid=myuser

EN

回答 1

Stack Overflow用户

发布于 2016-12-07 08:22:43

您可以在servlet中对url进行一些处理,并解析嵌入的表达式。

我使用JSP只是为了演示。这不是一个通用的解决方案。它只适用于这种情况。它不能以其他方式与多个或级联EL/占位符一起工作。

代码所做的,基本上是

  • 通过分隔符${}将url拆分为多个部分,
  • 通过串联

解析嵌入的url新的url

代码:

代码语言:javascript
复制
<%@ 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>

输出:

代码语言:javascript
复制
url before preparation: https://test.com/myapp.action?userid=${user.userId}
url after preparation: https://test.com/myapp.action?userid=myuser

这是一个解决方案,但也是一个糟糕的解决方案。

更好的解决方案将是:

在DB或Property-File

  • Creating中仅存储基本路径的
  • 附加参数(名称和值)的某些类

的好处是:

  • 较少重复,
  • 较少的DB /磁盘存储也会被浪费,
  • 易于通过maintain
  • easy来更改基本url
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41001804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档