标签:
以下几点乃经验积累:
在portlet插件工程里整合strut2时,不要直接从strut2官网上下载的full版本,然后全部的jar包都放到插件工程的lib里面,否则将会有n多不应该出现的问题(说是不应该是因为这些问题都与lifeRay无关),时间证明,以下jar包可以支持整合开发:
<component name="libraryTable">
<library name="Struts 2-2.3.20" type="struts2">
<properties version="2.3.20" />
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/ognl.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/commons-fileupload.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/xwork-core.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/commons-lang.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/commons-io.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/asm-commons.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/asm-tree.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/asm.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/struts2-core.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/freemarker.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javassist.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/struts2-portlet-plugin-2.3.20.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
请注意strut2的版本为2.3.20。
成功编译打包插件工程(这里指portlet)后,并配置了某个mode的default页面(这里已view为例)如:
<init-param>
<name>defaultViewAction</name>
<value>index</value>
</init-param>
在页面上添加该portlet会报错说找不到action,借鉴常规web的方法,在WEB-INF路径下假设index.action即可,如图 :
当提交参数到action时,如果出现Reject process action for http://localhost:8080/xxx的error,在插件工程的liferay-portlet.xml里面,添加<add-default-resource>true</add-default-resource>配置即可,如图:
至于为何,请看:
<!--
If the add-default-resource value is set to false and the portlet does not
belong to the page but has been dynamically added, then the user will not have
permissions to view the portlet. If the add-default-resource value is set to
true, the default portlet resources and permissions are added to the page, and
the user can then view the portlet. This is useful (and necessary) for portlets
that need to be dynamically added to a page. However, to prevent security loop
holes, the default value is false.
The properties "portlet.add.default.resource.check.enabled" and
"portlet.add.default.resource.check.whitelist" in portal.properties allow
security checks to be configured around this behavior.
-->
<!ELEMENT add-default-resource (#PCDATA)>
发觉从页面提交上来的参数,在action里面找不到时,有如下几个解决办法:
1. In your JSP, add <portlet:namespace/> in front of parameters names.
2. use Alloy elements
3. In liferay-portlet.xml add below tag:<requires-namespaced-parameters>false</requires-namespaced-parameters>
以上办法,我只证实了第三种,确实可行,具体配置请看上图。
The reason why two phases are needed is because a portlet does not own a whole HTML page, it only generates a fragment of it. The portal that holds the portlet is the one responsible for generating the page by invoking one or several portlets and adding some additional HTML around them。
标签:
原文地址:http://www.cnblogs.com/lauyu/p/4392990.html