当我使用它时:
<portlet:resourceURL var="ajaxURL" id="ajax" escapeXml="false" />
$.ajax({
method : "POST",
url : "${ajaxURL}",
data : {
...
在我的ajax调用中,它不包含在页面中。
但是当我尝试在页面上包含相同的javscript代码时,我会收到错误:
WARN [http-bio-8080-exec-27][404_jsp:109] /$%7BajaxURL%7D
我的问题是如何将该资源网址传递给包含的javascript或如何在javascript中生成它。
我试过了:
var urlVar = '<portlet:resourceURL var="ajaxURL" id="ajax" escapeXml="false" />'
当我以这种方式使用urlVar时:
$.ajax({
method : "POST",
url : urlVar,
data : {
...
它不起作用。有谁知道如何解决这个问题?感谢
答案 0 :(得分:0)
我可以为你考虑两种选择。
要在JavaScript文件中使用JSP标记和EL,您需要从JSP提供它。我之前在portlet中使用serveResource
方法来提供JavaScript文件。这样,您就可以在JavaScript JSP中使用相同的portlet标记。
在您的portlet JSP
中<portlet:resourceURL var='portletJS' id='javascriptResourceID' />
<script type='text/javascript' src='${portletJS'></script>
在portlet的serveResource
方法中。
if (request.getResourceID == "javascriptResourceID) {
//render JSP for JavaScript
}
另一个选择是在portlet中设置JavaScript变量,然后在静态JavaScript文件中使用该变量。
在您的portlet JSP
中<script type='text/javascript'>
var portletAjaxURL = '<portlet:resourceURL id="ajax" escapeXml="false" />';
</script>
在静态JavaScript文件中
$.ajax({
method : "POST",
url : portletAjaxURL,
data : {
...
答案 1 :(得分:0)
我找到了解决方案。这样做的一种方法是在jsp页面上定义资源URL,例如:
<portlet:resourceURL var="yourResourceURL" id="yourResource" />
并将它从paramter中的jsp传递给位于外部js文件中的函数。
例如在js:
中function test(urlVar) {
alert(urlVar);
$.ajax({
method : "POST",
url : urlVar,
success : function(data) {
}
});
}
并在jsp中调用这样的函数:
test(" ${yourResourceURL} ");
它应该有用。
答案 2 :(得分:0)
您可以使用java脚本生成resourceURL
var resourceURL = Liferay.PortletURL.createResourceURL();
resourceURL.setPortletId(86);
resourceURL .setParameter("key2", "value");
resourceURL.toString();