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

1.MVCActionCommand

2.MVCRenderCommand

3.MVCRecourceCommand

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

下面就简单介绍一下MVCActionCommand的用法,附上一个简单的小例子Say Hi to U portlet

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" %>

<portlet:actionURL name="greetToU" var="myCommand">
</portlet:actionURL>
<form method="post" action = "${myCommand}">
<p>What's your name?</p>
<input type="text" name="name">
<input type="submit" value="tell me">
</form>
${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上去就好啦,理清思路是不是简单多了呢,哈哈

liferay MVCActionCommand的用法及例子的更多相关文章

  1. oracle的loop等循环语句的几个用法小例子

    --loop循环用法 (输出1到10) declare v_num number(2) := 0; begin loop v_num := v_num + 1; exit when v_num > ...

  2. 16. orcle中replace的用法及例子

    replace 函数用法如下: replace('将要更改的字符串','被替换掉的字符串','替换字符串'); 例子: select  replace ('1,2,3',',',';') from d ...

  3. oracle的loop等循环语句的几个用法小例子[转]

    --loop循环用法 (输出1到10) declare v_num number(2) := 0; begin loop v_num := v_num + 1; exit when v_num > ...

  4. SYBASE bcp用法及例子

    BCP是SYBASE公司提供专门用于数据库表一级数据备份的工具. 语法: 语法如下:(可用 bcp – 得到) 常用参数说明: -b batch_size 指定所复制的每批数据中的行数.每个批处理作为 ...

  5. oracle中decode的用法(例子)

    使用结构: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN ...

  6. opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子

    http://blog.csdn.net/timidsmile/article/details/8519751 环境: vs2008 + opencv2.1 先看,这两个函数的用法(参考 opencv ...

  7. Python中threading的join和setDaemon的区别及用法[例子]

    Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join() ...

  8. C++中rapidxml用法及例子

    rapidxml是一个快速的xml库,比tinyxml快了50-100倍.本文给出创建.读取.写入xml的源码. 由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库 ...

  9. verilog中的function用法与例子

    函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不允 ...

随机推荐

  1. Windows Phone 开发起步之旅之一 平台环境的搭建

    最近大家都在写博客园的技术文章,按耐不住了,也把自己平时学习中遇到和学习到的一些东西写出来,供大家分享也好,自己留个纪念也好,有个可以查看的东西. 言归正传,随着微软对Windows Phone的投入 ...

  2. webservice简介以及简单使用

    本文主要是简单的介绍webservice是什么.webservice的由来.webservice的作用,以及后面会介绍webservice的使用. webservice是什么? 目前,Web serv ...

  3. Silverlight DataGrid数据行背景颜色控制

    sdk:DataGrid数据绑定后,部分特殊的行需要用不同的背景颜色来显示.(注册DataGrid的LoadingRow事件) private void radGridView_LoadingRow( ...

  4. luigi学习1

    一.luigi介绍 luigi是基于python语言的,可帮助建立复杂流式批处理任务管理系统.这些批处理作业典型的有hadoop job,数据库数据的导入与导出,或者是机器学习算法等等. luigi的 ...

  5. 区间 (vijos 1439) 题解

    [问题描述] 现给定n个闭区间[ai,bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排 ...

  6. feel

    昨天我大脑中还在盘旋几个关键字:健康 选择 方向 方法今天只有选择了,健康 是你选择了一种生活习惯,你能掌控的也就是好的习惯,选择了一种正确的价值观,选择了一个好的开始方向有很多,你的选择是结果方法 ...

  7. PAT乙级真题1001. 害死人不偿命的(3n+1)猜想 (15)(解题)

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  8. Mybatis 实现手机管理系统的持久化数据访问层

    最近公司需要对客户手机进行管理并提供二维码存储手机串号的加密字符.供其他接入系统通过扫面二维码解析使用.系统提供手机信息管理,客户管理,用户管理功能. 1.使用到的POJO类 1.1 User pac ...

  9. rman 命令

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  10. MongoDB牛刀小试

    MongoDB基本操作 1.MongoDB的启动 首先创建一个目录作为MongoDB的工作目录: 进入MongoDB的bin目录: 执行mongod命令,使用参数--dbpath指定MongoDB的工 ...