【问题标题】:How to call Struts1 Action from Ajax or JavaScript?如何从 Ajax 或 JavaScript 调用 Struts1 Action?
【发布时间】:2011-01-18 08:58:02
【问题描述】:

我需要在加载 JSP 时调用一个动作。跟踪访问该页面的用户数量。

我有一个操作VisitorCounterAction,它会更新数据库。 在加载 JSP 时,我正在调用 ajax 函数 callCounter();

{

        alert("callCounter");
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        // i need some correction here
        xmlhttp.open("GET",VisitorCounterAction,false);
        xmlhttp.send(null);
        alert("callCounter returned from Action");
        }

我得到一个例外:

/web/guest/content?p_p_id=31&p_p_lifecycle=0&p_p_state=pop_up&p_p_mode=view&_31_struts_action=%2Fimage_gallery%2Fview_slide_show&_31_folderId=10605 生成异常:null

请帮我解决这个问题。或任何其他方式来调用动作。 我无法重新加载页面,因为它会再次调用 onload 函数。

谢谢, DJ

【问题讨论】:

  • 为什么“p_p_state”的值为“pop_up”?
  • 您是否对您的操作类代码进行了单步调试?你在哪里得到空错误?我正在使用 Struts 1.3 进行一些 AJAX 调用,并且我没有在我的操作类中做任何特别的事情,所以我猜你的问题可能与你发送的参数有关。

标签: java javascript ajax struts


【解决方案1】:

XMLHttpRequest 对象的open 方法的第二个参数应该是一个字符串,它是请求的URL。在您的情况下,它应该是映射到您的VisitorCounterAction 的 Struts 的动作映射。比如:

xmlhttp.open("GET", "/viewCounterAction.do", false); 

【讨论】:

  • 嗨,约翰,我的问题与我的门户有关。我正在使用 Liferay 门户。它仍然给出同样的例外。但我终于可以看到警报消息了。在控制台中可以看到异常。我不想做,它不会采取行动。
  • 你能告诉我应该包含哪个 Jar 以使我的应用程序具有 AJAX,我使用的是 Struts 1.3 版本。我有 struts2-dojo-plugin.jar,它适用于 Struts 1.3 版本吗?
【解决方案2】:

您需要在调用操作时指定正确的 url。在您的 struts.xml 文件中,您将创建一个带有名称的操作条目。假设名称是 VisitorCounterAction。请注意,这不是 Action 类的名称,而是您在 struts.xml 中使用的名称。

您还可以配置 struts 来识别特定的扩展。默认是 .do。

要请求您将使用的操作:VisitorCounterAction.do。

那就试试吧:

  xmlhttp.open("GET","VisitorCounterAction.do",false);

还要注意 URL 周围的双引号,因为这是 xmlHttp 对象的 open() 方法中的字符串。

【讨论】:

  • 嗨,现在例外是(控制台中的记录器信息):20:44:32,153 INFO [STDOUT] 2010-02-18 20:44:32,153 [http-localhost%2F127.0.0. 1-8080-2] 警告 com.liferay.portal.util.PortalImpl - 当前 URL /web/guest/VisitorCounterAction.do 生成异常:null
【解决方案3】:

如果您使用的是 Liferay 4.2,那么此链接可能会对您有所帮助 (http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Ajax+Toolkit)。 Liferay 4.2 有自己的一套用于执行 AJAX 功能的 javascript API(在 jquery 中实现)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多