Spring Portlet + Thymeleaf:为 ActionMapping 绑定对象
Spring Portlet + Thymeleaf: Bind object for ActionMapping
使用模板引擎 Thymeleaf 的 Spring 4 Portlet 出现问题。
我想将工作正常的现有 servlet 转换为 portlet。
我使用 Thymeleaf 编辑 JSP 文件中表单中的对象。
<form method="POST" th:object="${object}" th:action="${portletActionURL}">
<input th:field="*{objField}"/>
...
<input type="submit"/>
</form>
portletActionURL
是生成的操作 URL,目前有效。如您所想,我想在我的控制器中使用 object
。我尝试了很多方法来实现这一点,例如以下:
@ActionMapping("saveChanges")
public void bla(@ModelAttribute("object") AnyDatatype object, ModelMap model, ActionResponse response, ActionRequest request) throws Exception { ...}
遗憾的是,对象在调用操作后尚未填充其属性。我不是很想知道,但我不知道如何使用 Thymeleaf 来实现这一点。
我知道使用 <form:form>
的选项,但 Thymeleaf 无法使用 taglibs
解析文件。我绝对想使用 Thymeleaf,因为我的大多数 JSP 文件都使用它,并且更改每个文件可能要花费很多精力。
我找到了解决方案!
我在 Liferay 门户中使用了 portlet。虽然 Liferay 默认需要命名空间参数,但我在 liferay-portlet.xml.
中停用了它
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>MyPortletName</portlet-name>
<requires-namespaced-parameters>false</requires-namespaced-parameters>
</portlet>
</liferay-portlet-app>
现在,无需更改上述代码即可正常工作。
此致
朱利安
使用模板引擎 Thymeleaf 的 Spring 4 Portlet 出现问题。
我想将工作正常的现有 servlet 转换为 portlet。 我使用 Thymeleaf 编辑 JSP 文件中表单中的对象。
<form method="POST" th:object="${object}" th:action="${portletActionURL}">
<input th:field="*{objField}"/>
...
<input type="submit"/>
</form>
portletActionURL
是生成的操作 URL,目前有效。如您所想,我想在我的控制器中使用 object
。我尝试了很多方法来实现这一点,例如以下:
@ActionMapping("saveChanges")
public void bla(@ModelAttribute("object") AnyDatatype object, ModelMap model, ActionResponse response, ActionRequest request) throws Exception { ...}
遗憾的是,对象在调用操作后尚未填充其属性。我不是很想知道,但我不知道如何使用 Thymeleaf 来实现这一点。
我知道使用 <form:form>
的选项,但 Thymeleaf 无法使用 taglibs
解析文件。我绝对想使用 Thymeleaf,因为我的大多数 JSP 文件都使用它,并且更改每个文件可能要花费很多精力。
我找到了解决方案!
我在 Liferay 门户中使用了 portlet。虽然 Liferay 默认需要命名空间参数,但我在 liferay-portlet.xml.
中停用了它<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>MyPortletName</portlet-name>
<requires-namespaced-parameters>false</requires-namespaced-parameters>
</portlet>
</liferay-portlet-app>
现在,无需更改上述代码即可正常工作。
此致 朱利安