0

我想验证 Alfresco 共享中的多个任务。我在任务界面中的每行添加了一个复选框和一个用于验证的按钮。由于验证我的任务可能需要一些时间,我想放置一个进度条来告知有多少任务已被验证。

我制作了一个网络脚本来维护一种计数器,这样我就可以每隔 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 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

4

3 回答 3

1

要么将其存储在 Session 范围的 Spring bean 中,要么使用原始 HttpSession 来存储您的状态。

 session.addAttribute(Name, ObjectToStore)
 session.getAttribute(Name)

这在 Java 支持的 webscript 中相当简单。如果您正在处理 JS 网页脚本,那么您必须通过 JavaScript 根对象使会话可用,请参阅Alfresco - HTTP 会话

于 2013-07-01T07:18:47.570 回答
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;
}


}
于 2013-07-10T08:20:59.263 回答
0

另一种方法是在客户端管理进度。例如,通过Alfresco.util.setVar("your var", "your value")在您的浏览器中使用 JS。但这仅在用户停留在同一选项卡/窗口中时才有效

于 2013-07-04T08:39:16.410 回答