liferay MVCActionCommand的用法及例子

在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上去就好啦,理清思路是不是简单多了呢,哈哈

时间: 2024-11-03 03:26:34

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

16. orcle中replace的用法及例子

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

IO流常用方法,流的用法,代码例子

/** * 一个汉字是一个字符,就是2个字节,就是16位,所以,要读取汉字,还得用字符流 *-------------------------------------- 基础流---------------------------------------------- */FileInputStream ://(字节输入流,一次读取1个字节(就是8位)) FileInputStream fis = new FileInputStream("文件路径");//字节输入流 FileOutp

video,audio用法小例子

用此小程序设计播放/暂停,放大缩小 <!DOCTYPE html> <html> <body> <div style="text-align:center"> <button onclick="playPause()">播放/暂停</button> <button onclick="makeBig()">放大</button> <button o

verilog中的function用法与例子

转http://www.cnblogs.com/hfyfpga/p/4280946.html 函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不允许输出端口声明(包括输出和双向端口) ,但可以有多个输入端口.函数定义的语法如下: function [range] function_id;    input_declaration    other_d

C++中rapidxml用法及例子

rapidxml是一个快速的xml库,比tinyxml快了50-100倍.本文给出创建.读取.写入xml的源码. 由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库的下载地址为:官方网站: http://rapidxml.sourceforge.net/,这个库源码一共只有四个文件分别是: 关于raidxml资料相关的介绍网上有很多资料,在这里我就不重复介绍了,下面直接贴代码: #include "stdafx.h" #include "s

命名空间函数用法及例子

命名空间函数的实现示例,如果命名空间存在,便不会再重新创建它. var MYAPP=MYAPP || {}; MYAPP.namespace = function(ns_string){ var parts = ns_string.split('.'), parent = MYAPP, i, len; //剥离最前面的冗余全局变量 if(parts[0]=="MYAPP"){ parts = parts.slice(1); } for(i=0,len=parts.length;i<

C++中rapidxml用法及例子(源码)

rapidxml是一个快速的xml库,比tinyxml快了50-100倍.本文给出创建.读取.写入xml的源码. 由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml,关于这个库的下载地址为:官方网站:https://sourceforge.net/projects/rapidxml/,这个库源码一共只有四个文件分别是: 关于raidxml资料相关的介绍网上有很多资料,在这里我就不重复介绍了,下面直接贴代码: #include "stdafx.h" #includ

mysql字符串操作相关函数用法总结

功能用法简单例子一览表 函数 功能 用法 例子 left() 从字符串左边为边界返回相应长度的子字符串 left(str, length) mysql> select left('vssf',3); +----------------+ | left('vssf',3) | +----------------+ | vss            | +----------------+ 1 row in set (0.00 sec) right() 从字符串右边为边界返回相应长度的子字符串 ri

Android通过用代码画虚线椭圆边框背景来学习一下shape的用法

在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状,shape可以绘制矩形环形以及椭圆,所以只需要用椭圆即可,在使用的时候将控件比如imageview或textview的高宽设置成一样就是正圆,solid表示远的填充色,stroke则代表远的边框线,所以两者结合可以实现带边缘的圆,当然也可以直接加上size控制高宽.那么我首先带你们了解一下Shape下有哪些标签,并且都代表什么意思: shape属性: rectangle:矩形 oval:椭圆 line:线,需要