这是我的问题,我正在使用jsp脚本,尝试匹配请求网址中的关键字并执行某些操作:
<script>
$url = '${pageContext.request.requestURL}';
if("${fn:contains(url, 'key')}" == true){
...
}
....
但是这个doest工作......我不确定问题出在哪里但是我希望它像url包含这个字符串一样,进入if条件。
谢谢
答案 0 :(得分:2)
您正在混合JSP / EL和JavaScript,就像它们同步运行一样。这是错的。 JSP / EL在Web服务器中运行,并生成在webbrowser中执行的HTML代码。 JavaScript(JS)是生成的HTML代码的一部分,仅在webbrowser中运行。
您需要在JSP / EL中完全执行此操作,或者在JavaScript中完全执行此操作。您可以使用JSP / EL动态生成JS代码,以便在页面到达浏览器时执行。在浏览器中右键单击页面,执行查看源以查看JSP / EL生成的内容。您不应该看到任何JSP / EL行。您应该只看到HTML / JS代码。它正是那个 JS代码,然后被执行。
您正在使用JSP EL函数来测试当时不在变量范围内的JS变量。这不会起作用。它只能测试JSP / EL变量。
以下是你在纯JS中的表现:
<script>
var url = window.location.href;
if (url.indexOf('key') > -1) {
// ...
}
</script>
如果确实坚持使用JSP / EL执行此操作,您可以执行以下操作:
<script>
var url = '${pageContext.request.requestURI}';
if (${fn:contains(pageContext.request.requestURI, 'key')}) {
// ...
}
</script>
然后,这将生成以下JS代码(在浏览器中右键单击页面,查看源以查看它):
<script>
var url = '/some/uri';
if (true) {
// ...
}
</script>
但这没有任何意义。无论您需要解决什么功能需求,您都需要三思而后行。随意提出一个关于以正确方式解决具体功能要求的新问题。
答案 1 :(得分:0)
如果您想要一个请求页面的参数,请使用${param.paramName}
。所以在这种情况下${param.key}
。请参阅the docs中的隐含对象。如果您只想检查它是否值,请尝试${not empty param.key}
。