会话变量更新进度条Alfresco

时间:2013-06-28 14:17:58

标签: progress-bar alfresco alfresco-share

我想验证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

3 个答案:

答案 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")。但这仅在用户停留在同一选项卡/窗口中时才有效