方案
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问题吗?
答案 0 :(得分:2)
简答:不要。答案很长:使用Ajax控件。你把它放在你的页面上,你的URL改为myxpages.xsp / nameyougavetheajaxcontrolproperty
通过这种方式,您可以确保不会违反任何缓存结果或待处理操作。它还有一个属性,您可以在其中直接指定Java类。该课程延伸(需要谷歌 - 在之前回答过它),这使您可以直接访问请求/响应
<强>更新强>
你需要告诉你已经完成了:
facesContext.responseComplete();