包含javascript文件中的liferay资源

时间:2013-08-13 11:53:20

标签: jquery ajax liferay portlet spring-portlet-mvc

当我使用它时:

<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 : {
...

它不起作用。有谁知道如何解决这个问题?感谢

3 个答案:

答案 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();