博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
liferay MVCActionCommand的用法及例子
阅读量:4654 次
发布时间:2019-06-09

本文共 2686 字,大约阅读时间需要 8 分钟。

在liferay7中把portlet中的控制层拆成了3个部分:

1.MVCActionCommand

2.MVCRenderCommand

3.MVCRecourceCommand

至于为什么要拆出来了,之前我们写actionURL,一个JSP中可能有很多actionUrl,都是把它写在mvcPortlet类中,当代码量变大,不便于管理,且结构不是特别清晰。

下面就简单介绍一下MVCActionCommand的用法,附上一个简单的小例子

1.建一个普通的mvc-portlet,之前以为mvc-action-command是独立存在的,也是傻傻的^^

这个是通过liferay ide插件自己生成出来的模板,随便解释一下,@Component里面property属性的用法。

1、com.liferay.portlet.display-category:此处是控制的在Portlet管理处,我们添加Portlet时,Portlet是在哪个分类下显示的。如下图所示,我们这里配置的是在category.sample下面,所以我们点击添加时可以在应用程序的示例下面看到。category.sample是国际化的一个key值,如果我们想自己定义分类,可以修改此值即可。

2、com.liferay.portlet.instanceable:此配置意思是是否允许portlet在同一个页面上添加多次,默认值是true,我们有些场景下可能只希望同一个Portlet,在同一个页面只允许添加一次,则将此改为false即可。看上图portlet前面是一个小圆圈的表示只能添加一次,是九个小方块的表示可以添加多次。

3、javax.portlet.display-name:显示名称,也就是我们上面看到的Portle的名称。

4、javax.portlet.init-param.template-path,此值默认为“/”,而且也只能是“/”,在MVCPortlet类里已经限制了,如果不是会报错。

5、javax.portlet.init-param.view-template=/view.jsp,portlet被拖到Liferay页面上后默认执行的是哪个JSP,此路径是相对于META-INF/resource而言,我们可以在此修改相应的JSP路径和名称。

6、javax.portlet.resource-bundle=content.Language语言的国际化支持文件,非必须的。如果要让portlet支持国际化,则需要。可在Resource/content的目录里面建立language_zh_CN.porperties文件,在里面写中文的国际化。此内容后面有博客详细说明。

7、javax.portlet.security-role-ref=power-user,user:将portlet部署后,此portlet默认哪些角色有将此portlet添加到页面的权限。

注意:此处的配置不只是只有这些,以前版本的portlet.xml、liferay-portlet.xml、liferay-display.xml的配置属性都已经挪到了这里,所以如果看到教程说的是对应的配置,在7.0里面都是添加到此处。

更多的配置可以参考源码里面的类:PortletPropertyValidator

(此处的解释参考胡启稳老师的博客)

 

2.然后我的目的是做一个portlet,你输入名字之后,它会向你问好,效果如下:

3. 首先,我们要做的是要在view.jsp文件中写一个表单让用户可以让用户输入值,同时在用户点击按钮时触发actionRequest处理传回来的数据。

<%@ include file="/init.jsp" %>

What's your name?

${greet}

4.重点来了,如何把你写的后台的actionCommand与前台的JSP联系起来,同时又与你的portlet联系起来呢?

先看代码,然后再解释:

package mvc.portlet.portlet;import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand;import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand;import com.liferay.portal.kernel.util.ParamUtil;import javax.portlet.ActionRequest;import javax.portlet.ActionResponse;import org.osgi.service.component.annotations.Component;@Component(immediate = true,property = {        "javax.portlet.name=mvc_Portlet",        "mvc.command.name=greetToU"},service = MVCActionCommand.class)public class MyActionCommand extends BaseMVCActionCommand {    @Override    protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {        String name = ParamUtil.getString(actionRequest, "name");        actionRequest.setAttribute("greet","Hi " + name+ ", nice to meet u!");    }}

注意上面那两个参数,portlet.name把它与portlet联系起来;command.name把它与jsp上的actionUrl联系起来。

然后部署到7.0的portal上去就好啦,理清思路是不是简单多了呢,哈哈

转载于:https://www.cnblogs.com/hibou/p/6107561.html

你可能感兴趣的文章
C/C++心得-结构体
查看>>
函数名作为参数传递
查看>>
apt-get for ubuntu 工具简介
查看>>
数值计算算法-多项式插值算法的实现与分析
查看>>
day8-异常处理与网络编程
查看>>
Python基础-time and datetime
查看>>
Linux epoll 笔记(高并发事件处理机制)
查看>>
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>
Hibernate二级缓存配置
查看>>
LoadRunner常用术语
查看>>
关于jedis2.4以上版本的连接池配置,及工具类
查看>>