通过ajax调用调用XPage

时间:2014-02-18 06:59:17

标签: ajax xpages lotus-domino

方案

Lotus Domino表单,其中包含一个对Xpage进行Ajax调用的按钮,用于执行某些操作(读取属性文件)。

框架: prototype.js

按键代码:

var now = new Date()
var n = $H({
            ........
    now: now.getTime()      
});

var url = "/" + $F("path") + "/myxpages.xsp";
var myAjax = new Ajax.Request(
    url, 
{
    method: 'post', 
    parameters: n.toQueryString(), 
    onComplete: function(response) {

                      ajaxResult = response.responseText;
            }
}); 

XPAGE

myxpages.xsp afterPageLoad 事件

上有此SSJS代码
 var request = facesContext.getExternalContext().getRequest();
 var response = facesContext.getExternalContext().getResponse();
 response.setHeader("Expires", -1);
 response.setHeader("Cache-Control", "no-cache");

 com.org.MyGetProperties.readProperties(request,response);

MyGetProperties类

此类部署在 WebContent / WEB-INF / classes

public class MyGetProperties {

    static PrintWriter out = null;

    public static synchronized void readProperties(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
                *(DO SOME STUFF HERE)*
                out = new PrintWriter(response.getWriter());

                // return result
                out.println("OK");

            } catch (Exception e) {..}
    }
}

有时ajax响应调用中的 ajaxResult 变量为空,有时是“OK”,正如预期的那样(似乎与缓存有关) ,但我认为我已经正确管理了它。

不同的生产服务器上的行为是不同的,我不知道是否依赖于服务器配置。

可能是PrintWriter问题吗?

1 个答案:

答案 0 :(得分:2)

简答:不要。答案很长:使用Ajax控件。你把它放在你的页面上,你的URL改为myxpages.xsp / nameyougavetheajaxcontrolproperty

通过这种方式,您可以确保不会违反任何缓存结果或待处理操作。它还有一个属性,您可以在其中直接指定Java类。该课程延伸(需要谷歌 - 在之前回答过它),这使您可以直接访问请求/响应

<强>更新

你需要告诉你已经完成了:

facesContext.responseComplete();

查看我的original post on XAgentsrevision和一些thought on testing