gpt4 book ai didi

java - Adobe CQ5 请求参数绑定(bind)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:55 27 4
gpt4 key购买 nike

有谁知道将请求参数绑定(bind)到 adobe CQ5 中的对象的任何方法(比如在 spring MVC 或其他此类框架中)?

或者如果没有办法直接在 CQ5 中执行此操作,是否有人集成了第 3 方框架来执行此操作?

最佳答案

我还没有发现任何与 CQ5 本身结合的东西。不过,您可以在 CQ5 中使用 Spring DataBinder 类,这就是我所做的。只需在组件中直接使用 org.springframework.web.bind.ServletRequestDataBinder 类,如下所示:

ServletRequestDataBinder dataBinder = new ServletRequestDataBinder(myModel, "myModel");
dataBinder.bind(slingRequest);

如果需要,您可以通过#getBindingResult() 方法从dataBinder 实例中获取org.springframework.validation.BindingResult。此外,您可以配置 org.springframework.core.convert.ConversionService 以通过 ServletRequestDataBinder#setConversionService(ConversionService) 方法使用。

我做的一件事也是绑定(bind) Sling 后缀。我在我的 URL 后缀中遵循 ${key}=${value} 模式,以便在使用 Sling 后缀时尽可能利用调度程序缓存。例如,给定 /content/myApp/en_US/myPage.html/key1=value1/key2=value2.html 的 URL,我们将后缀解析为 的 Map >{"key1":"value1","key2":"value2"} 。您可以通过扩展 ServletRequestDataBinder 并覆盖 #addBindValues(MutablePropertyValues mpvs, ServletRequest request) 方法来绑定(bind)这些值。例如:

public class SlingServletRequestDataBinder extends ServletRequestDataBinder {
public SlingServletRequestDataBinder(Object target, String objectName) {
super(target, objectName);
}

@Override
protected void addBindValues(MutablePropertyValues mpvs,
ServletRequest request) {
SlingHttpServletRequest slingHttpServletRequest = unwrap(request);

if (null == slingHttpServletRequest) {
return;
}

String suffix = slingHttpServletRequest.getRequestPathInfo().getSuffix();
Map<String, String> suffixParameters = // parse suffix into Map here...
mpvs.addPropertyValues(suffixParameters);

super.addBindValues(mpvs, request);
}

public static SlingHttpServletRequest unwrap(ServletRequest servletRequest) {
// immediate termination if we found one
if (servletRequest instanceof SlingHttpServletRequest) {
return (SlingHttpServletRequest) servletRequest;
}

while (servletRequest instanceof ServletRequestWrapper) {
servletRequest = ((ServletRequestWrapper) servletRequest).getRequest();

// immediate termination if we found one
if (servletRequest instanceof SlingHttpServletRequest) {
return (SlingHttpServletRequest) servletRequest;
}
}

return null;
}
}

以上内容应结合使用 Sling 后缀和 URL 参数。例如,给定这个模型:

public class MyModel {
private String key1;
private String key2;
private String key3;
// getters and setters go here...
}

/content/myApp/en_US/myPage.html/key1=value1/key2=value2.html?key3=value3 的 URL,您的模型最终将成为 {"key1":"value1", "key2":"value2", "key3":"value3".

关于java - Adobe CQ5 请求参数绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com