- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题类似于以下帖子: JSON ajax POST to Spring Portlet Controller @ResourceMapping conversion issue和 @ResourceMapping that accepts JSON from Ajax request
我在那里尝试过 Tipps,但没有成功。我有以下技术:
在客户端,我生成了一个字符串化的 json-Object,它具有用于 jsp 的 kendo-ui 的功能,并在请求正文中提交。目前它只包含一些过滤器参数(但它也可以包含用于服务器端分页、排序、分组等的其他参数)。
在 Firefox 开发人员工具中,请求正文(有效负载)如下所示:
{
"filter" : {
"logic" : "and",
"filters" : [{
"field" : "name",
"value" : ""
}, {
"field" : "city",
"value" : ""
}, {
"field" : "zip",
"value" : ""
}, {
"field" : "country",
"value" : ""
}
]
}
}
在服务器端,我有一个用于该结构的 POJO。我在 Spring Web MVC Servlet 环境中成功测试了它。使用 @RequestBody 和 Jackson 可以对 JSON 对象进行反序列化。
在liferay-portlet 环境 中工作我不能使用@RequestBody 和httpServletRequest。
Controller 如下所示:
@ResourceMapping(value = "test")
public void searchProviderTest(ResourceRequest request, ResourceResponse response,
@ModelAttribute("filter") DataSourceRequest dataSourceRequest) {
LOGGER.info(">>>>>> JsonOjekt per Parameter übergeben: " + request.getParameter("filter"));
LOGGER.info(">>>>>>>> DatasourceRequest: " + dataSourceRequest);
}
DataRequestObject 没有值。我看到了所有属性,但它们是空的。并且没有请求参数“filter”(如预期的那样)
这是我的 DataSourceRequest 对象(摘要):
public class DataSourceRequest {
private int page;
private int pageSize;
private int take;
private int skip;
private List<SortDescriptor> sort;
private List<GroupDescriptor> group;
private List<AggregateDescriptor> aggregate;
private HashMap<String, Object> data;
private FilterDescriptor filter;
public DataSourceRequest() {
filter = new FilterDescriptor();
data = new HashMap<String, Object>();
}
...(getters and setters)
public static class FilterDescriptor {
private String logic;
private List<FilterDescriptor> filters;
private String field;
private Object value;
private String operator;
private boolean ignoreCase = true;
public FilterDescriptor() {
filters = new ArrayList<FilterDescriptor>();
}
...(getters and setters)
几周以来我一直在寻找解决方案,但我没有使用 portlet Controller 将 JSON 对象转换(反序列化?)为 DataSourceRequest 对象。我什至不知道如何从 portlet Controller 访问请求正文(有效负载)中的 JSON 字符串。
在第二个提到的帖子之后,嵌套对象可能是问题所在。我联系了 kendo-ui 支持问题,如何提交请求以获取帖子中描述的格式。但他们告诉我,这是不可能的(例如,使用数据源对象的参数映射属性),我必须在服务器端解决它。
第一篇文章描述了一个使用@ModelAttribute的解决方案,但后来我只得到了空对象——当我尝试使用@RequestParam 获取 JSON 时,我得到了一个错误,参数不在请求中(我认为是因为它在正文中)
我正在考虑建立一个基于 Spring Web MVC Servlet 的附加 RESTFul API - 我什至尝试过它并且它有效 - 但我不确定这是否真的有意义,因为 liferay 已经有一个 RESTFul -API。
有没有办法在 Portlet Controller 内将 JSON 对象转换为 JAVA 对象?或者我需要额外的 API 吗?
欢迎任何提示!
最佳答案
我在使用 Liferay 序列化和反序列化 Json 时遇到了同样的问题。我的解决方案是将 json 作为参数发送到表单数据中。这样我就可以使用以下方法检索 Json:
String paramJson = ParamUtil.getString(request, "myJson");
然后利用Gson反序列化的api:
new Gson().fromJson(paramJson, MyPOJO.class);
使用 Gson 不会有那么多麻烦。您还可以使用 Gson 在返回的服务中序列化对象,这将避免 Liferay 无法正确序列化嵌套对象的问题。
此代码显示如何将 Json 作为请求正文发送:
请求将由 MVCPortlet 中的“serveResource”方法处理。
var portletUrl = Liferay.PortletURL.createResourceURL();
portletUrl.setPortletId(<portletId>);
portletUrl.setResourceId('publicar'); // Any identifier
var formData = new FormData();
formData.append(<portlet-namespace> + 'myJson', JSON.stringify(object));
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', callbackSuccess, false);
xhr.open('POST', urlPortlet);
xhr.send(formData);
关于java - 使用@ResourceMapping 和@ModelAttribute 在 Spring Portlet Controller 中访问 RequestBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46567570/
在今天的一次采访中,我提到我在 portlet 中做了一些 jsf 工作。面试官询问 portlet-bridge 的具体功能。我从来没有研究过它,只是使用它,因为我被告知它会使 jsf 在 port
我是 Portlet 应用程序开发的新手,我对 PortletContext 对象有一个疑问。如果在单个 Portlet 应用程序中配置了多个 Portlet,则每个 PortletApllicati
我正在尝试修复分配给自定义 portlet 管理器的日历 portlet 的月份导航。这个管理器是从一个特定的浏览器页面模板调用的: 不幸的是,经理没有为我呈现带有散列的包装器,因此我尝试手动将 k
使用 documentation在 plone.org 和论坛中的一些网站上,我能够在 Plone 4.0.8 中的内容下方获得一个自定义 portlet 管理器。实际上,目标是让 4 个自定义管理器
是否可以在一个 portlet 中创建几个 portlet?我的意思是多级 portlet。 最佳答案 是的。您可以使用 Nested Portlet为此目的。这是其他 portlet 的布局容器。您
当我在 tomcat 服务器上的 liferay 6.0.6 中一个接一个地部署两个 portlet 时,第二个部署的 portlet 正在取消部署第一个部署的 portlet,反之亦然: 堆栈跟踪:
我正在使用 Spring MVC Portlet 开发一个 portlet 并部署在 Liferay 中。我对这个 portlet 的意图是显示一个包含一些重要信息的树。为了实现这个目标,我需要请求服
所以我用谷歌搜索了一整天,得到的答案很少,但他们都失败了。更不用说所有的解决方案都 > 3 岁了。我正在使用 LR 6.1 CE。将不胜感激简单的工作示例,因为其他答案总是让我获得空值。 最佳答案 有
我正在使用portlet function of JQuery UI创建一个基本的门户页面。 JQuery UI 页面上的示例显示了一个非常简单的示例,其中包含 3 列和适合这些列的固定大小的 por
对于由 Liferay EE 6.0 SP1 提供支持的网站,有时某些页面需要“共享”某些 portlet 的同一实例,但其他页面将拥有自己的实例。 例如(人为设计,但希望能够说明问题),考虑一个带有
我是 Liferay portlet 的新手。谁能告诉我如何根据另一个 portlet 的事件显示或隐藏一个 portlet。我只想在ice:spaces 中编码,而不是任何其他方式。如果有人知道这个
父 portlet 有一个表单,我填写但尚未提交。 然后,我从这个父 portlet 中单击一个链接来打开一个弹出 portlet,在弹出窗口中填写表单并提交值。 该值现在应该在父 portlet 中
我有一个页面,其中包含一个 portlet(portlet A)和一个用于打开弹出窗口的按钮。 Liferay.Util.openWindow(..) 在弹出窗口中,我有另一个 portlet(por
我的问题是如何从一个 portlet 转到另一个。 我的场景是这样的: 用户可以查看特定 portlet 的 view.jsp。当他单击按钮时,页面将显示另一个 portlet 的 view.jsp。
例如,我有三个 portlet:portletA、portletB 和 portletC。 portletA 显示在左侧,它有两个链接 linkB 和 linkC。 如果我点击 linkB 然后 po
为什么我要在 tomcat 和 gwt 之上使用 java portlet?portlet 是否会减少或不需要我使用 jsp 和 jsf?Jboss 是否已成为 portlet 进化文化的一部分? J
我需要自定义哪个 portlet 出现在“添加更多 portlet 菜单”中,如下图所示: 我需要根据登录的用户或站点(社区)限制此菜单中显示的 portlet 数量。这样,站点所有者或站点管理员将能
我如何重新排序 portlet,以便继承的父 portlet 排在当前项的 portlet 之前? 最佳答案 Mathias 的解决方案似乎更简单;无论如何,如果您不想安装第三方产品,我想保留此文档。
在 Plone 4.1 中禁用站点范围内的 portlet 类型的最佳方法是什么?默认设置提供约 10 个 portlet 类型,但站点用户仅拥有少数几种用例(静态文本、新闻)。 最佳答案 Portl
我正在将最基本的 Portlet 部署到 Liferay: public class FirstPortlet extends GenericPortlet { @RenderMode(nam
我是一名优秀的程序员,十分优秀!