我想验证Alfresco共享中的多个任务。我在任务界面中每行添加了一个复选框,还有一个要验证的按钮。 由于验证我的任务可能需要一段时间,因此我想设置一个进度条来通知已经验证了多少任务。
我创建了一个Web脚本来维护一种计数器,这样我就可以每隔x秒更新一次进度条。 存储该信息以在露天共享中检索它的最佳解决方案是什么?我试图将我的变量存储在会话中,但我没有成功。
有人可以告诉我该怎么做吗?
提前谢谢
编辑这是我试过的
public class HttpSessionHelper extends BaseScopableProcessorExtension {
public void setInSession(String paramName, String paramValue) {
HttpSession session = ServletUtil.getSession();
session.setAttribute(paramName, paramValue);
}
public String getFromSession(String paramName) {
HttpSession session = ServletUtil.getSession();
Object paramValue = session.getAttribute(paramName);
if (paramValue != null) {
return paramValue.toString();
} else {
return null;
}
}
}
Bean定义
<bean id="tasksProgression" parent="baseJavaScriptExtension" class="com.test.HttpSessionHelper">
<property name="extensionName">
<value>tasksProgression</value>
</property>
</bean>
Alfresco网页脚本:validation-state.lib.js
function getValidationState(){
tasksProgression.setInSession("test",5);
return tasksProgression.getFromSession();
}
当我进入setInSession时,ServletUtil.getSession()返回null
答案 0 :(得分:1)
将它存储在Session作用域的Spring bean中,或者使用原始的HttpSession来存储你的状态。
session.addAttribute(Name, ObjectToStore)
session.getAttribute(Name)
这在Java Backed webscript中相当简单。如果您正在处理JS webscripts,那么您必须通过JavaScript根对象使会话可用 见Alfresco - HTTP Sessions
答案 1 :(得分:1)
解决方案是使用java支持的Web脚本:
public class GetValidationProgressionBean extends DeclarativeWebScript {
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
String sessionVar = "progressionState";
WebScriptSession session = req.getRuntime().getSession();
Integer counter = (Integer) session.getValue(sessionVar);
session.setValue(sessionVar, Integer.valueOf(counter.intValue() + 1));
counter = (Integer) session.getValue(sessionVar);
//put all the objects that you need in renditions to the model map
Map<String, Object> model = new HashMap<String, Object>();
model.put(sessionVar, counter);
return model;
}
}
答案 2 :(得分:0)
另一种方法是管理客户端的进度。
例如在浏览器JS中使用Alfresco.util.setVar("your var", "your value")
。但这仅在用户停留在同一选项卡/窗口中时才有效