如何在Alfresco中通过Ajax请求向Webscript传递数据?
在Alfresco 5.2的Java WebScript中获取前端JSON请求参数
解决方案步骤
1. 核心思路
前端通过jsonPost发送的是JSON格式的请求体,无法通过常规的request.getParameter()获取参数,需要直接读取请求体内容并解析JSON,从中提取url值。
2. 修改Java WebScript类代码
更新你的SaveSearchResultsScript类,添加请求体读取和JSON解析逻辑:
import org.json.JSONObject; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.Status; import java.io.BufferedReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class SaveSearchResultsScript extends DeclarativeWebScript { @Override protected Map<String, Object> executeImpl(WebScriptRequest request, Status status) { Map<String, Object> model = new HashMap<>(); String requestBody = ""; // 读取POST请求体的原始内容 try (BufferedReader reader = request.getContent().getReader()) { StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } requestBody = sb.toString(); } catch (IOException e) { status.setCode(Status.STATUS_BAD_REQUEST); status.setMessage("读取请求体失败"); status.setException(e); return model; } // 解析JSON并提取url参数 try { JSONObject jsonObject = new JSONObject(requestBody); String url = jsonObject.getString("url"); // 这里可以添加你的业务逻辑,比如将URL保存到Alfresco节点或数据库 System.out.println("收到的URL: " + url); model.put("data", "URL已成功保存: " + url); } catch (Exception e) { status.setCode(Status.STATUS_BAD_REQUEST); status.setMessage("JSON格式无效"); status.setException(e); } return model; } }
3. 关键细节说明
- 请求体读取:通过
request.getContent().getReader()获取请求输入流,逐行读取拼接成完整的JSON字符串。 - JSON解析:使用Alfresco内置的
org.json.JSONObject工具类解析请求体,直接通过getString("url")获取前端传入的URL值。 - 异常处理:针对IO异常和JSON解析异常设置对应的HTTP状态码,便于前端定位问题。
4. 验证返回结果
前端的successCallback会接收到你在model中放入的data字段,对应FTL模板的输出内容,你可以在浏览器控制台看到返回的成功提示。
内容的提问来源于stack exchange,提问作者Mike1988B
相关产品推荐
相关产品推荐

