- 浏览: 213620 次
- 性别:
- 来自: 湖北->上海
最新评论
-
苹果超人:
我也遇到这个问题,我想在ConfigurationAction ...
杀千刀的PortletPreferences -
flago:
Liferay 的论坛设置的默认显示多少条帖子怎么设置??
liferay中vm中如何调用java类代码 -
ofdata:
遭遇此问题
杀千刀的PortletPreferences -
yaokaiwen99:
大哥求一个简单的flexigrid在liferay中应用的例 ...
Liferay异步提交 -
gaigai511225:
你好 插件环境那个url 具体怎么写 我照您的方式写了出错 ...
Liferay异步提交
liferay的异步提交其实是非常简单的,他用的是json & jquery
1.jsp相关代码如下
<script type="text/javascript"> function <portlet:namespace/>change(){ /*我用的是plugin开发方式,所以URL是这种方式,如果是ext方式要用 <portlet:actionURL windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>"> <portlet:param name="struts_action" value="/blogs/edit_entry" /></portlet:actionURL>, 注意LiferayWindowState.EXCLUSIVE.toString()这个不可以用错*/ var url = '<%=request.getContextPath()%>/portlet_action/dashboard/salestrend'; jQuery.ajax({ type: 'POST', url:url, data:{ //参数传递 userId:'<%=PortalUtil.getUserId(request)%>', regionId:regionId, provinceId:provinceId, cityId:cityId, year:year, month:month, grouping:grouping, targetValue:targetValue }, dataType:'json', beforeSend: function() { //发送前出现一个加载中的图片 jQuery('#<portlet:namespace/>dashboard-content').html('<div style="text-align:center;"><img width="32" height="32" src="<%=themeDisplay.getTheme().getContextPath()+themeDisplay.getTheme().getImagesPath()%>/progress_bar/loading_animation.gif"/></div>'); }, success: function(message){ //成功,message是json对象 jQuery('#<portlet:namespace/>dashboard-content').html(message.xml); }, error: function() { //报错处理 jQuery('#<portlet:namespace/>dashboard-content').html('<span class="portlet-msg-error"><liferay-ui:message key="an-unexpected-system-error-occurred"/></span>'); } }); } <script type="text/javascript">
2.JSONAction相关代码如下:
//class一定要继承JSONAction public String getJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { long userId = ParamUtil.getLong(request, "userId"); Date date = ParamUtil.getDate(request, "date", IdmDateUtil.DATE_FORMAT); List<SalesTargetInfo> productVariants = SalesTargetServiceUtil.getProductVariantList(userId, date); JSONArray variantJsonArray = JSONFactoryUtil.createJSONArray(); for(SalesTargetInfo salesTarget : productVariants){ JSONObject jsonObj = JSONFactoryUtil.createJSONObject(); jsonObj.put("id", salesTarget.getTargetId()); jsonObj.put("val", salesTarget.getValDoubleDesc()); jsonObj.put("type", salesTarget.getType()); variantJsonArray.put(jsonObj); } List<SalesTargetInfo> productGroup = SalesTargetServiceUtil.getProductGroupList(userId, date); JSONArray groupJsonArray = JSONFactoryUtil.createJSONArray(); for(SalesTargetInfo salesTarget : productGroup){ JSONObject jsonObj = JSONFactoryUtil.createJSONObject(); jsonObj.put("id", salesTarget.getTargetId()); jsonObj.put("val", salesTarget.getValDoubleDesc()); jsonObj.put("type", salesTarget.getType()); groupJsonArray.put(jsonObj); } JSONObject jsonObj = JSONFactoryUtil.createJSONObject(); jsonObj.put("variant", variantJsonArray); jsonObj.put("group", groupJsonArray); // TODO Auto-generated method stub return jsonObj.toString(); }
3.如果你对JSON不熟,希望下代码能帮助你
//参数message就是发送成功后success: function(message)中的message(json对象) function <portlet:namespace/>setVriantAndGroup(message){ var variants = message.variant; for(var i=0;i<variants.length;i++){ variant = variants[i]; if(variant.id == id && variant.type == <%=IdmWebKeys.SALES_TARGET_TYPE_THIRD%>){ jQuery(this).children('td:nth-child(3)').children(':first-child').val(variant.val); }else if(variant.id == id && variant.type == <%=IdmWebKeys.SALES_TARGET_TYPE_FORTH%>){ jQuery(this).children('td:nth-child(2)').children(':first-child').val(variant.val); } } var groups = message.group; for(var i=0;i<groups.length;i++){ group = groups[i]; if(group.id == id && group.type == <%=IdmWebKeys.SALES_TARGET_TYPE_THIRD%>){ jQuery(this).children('td:nth-child(3)').children(':first-child').val(group.val); }else if(group.id == id && group.type == <%=IdmWebKeys.SALES_TARGET_TYPE_FORTH%>){ jQuery(this).children('td:nth-child(2)').children(':first-child').val(group.val); } } }
4.如果返回的数据很大,并且需要改变的UI也有很多地方,例如:你提交一个form成功后,需要整个换掉这个form,那么用js是一件痛苦的事,这里还有一个更简单的做法在后台JSONAction中做文章,下面是一个列子
public String getJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub String path = StrutsUtil.TEXT_HTML_DIR; path += "/user/edit_user.jsp"; long userId = ParamUtil.getLong(request, "userId"); String cmd = ParamUtil.getString(request, Constants.CMD); long selUserId = ParamUtil.getLong(request, "selUserId"); String namespace = ParamUtil.getString(request, "namespace"); RequestDispatcher requestDispatcher = request.getRequestDispatcher(path); StringServletResponse stringResponse = new StringServletResponse( response); stringResponse.setContentType("text/xml; charset=UTF-8"); request.setAttribute("userId", new Long(userId)); request.setAttribute(Constants.CMD, cmd); request.setAttribute("selUserId", new Long(selUserId)); request.setAttribute("namespace", namespace); requestDispatcher.include(request, stringResponse); JSONObject jsonObj = JSONFactoryUtil.createJSONObject(); jsonObj.put("userContent", stringResponse.getString()); return jsonObj.toString(); }
看出来了吗,所有的东西都在/user/edit_user.jsp里面,这样就不用去考虑让人头痛的JS了,全都交给JSP去做,然后直接反回生成的HTML代码,你只需要jQuery('#**').html(message.userContent),一切都结束了,整个世界都清静了。
以下备注一定要看:
在做异步提交的时候一定要做好安全认证,特别是plugin方式,因为plugin里面的request不是portal里面的request,他里面什么都没有(PortletURL方式提交除外),所以我一般会把userId给带进去,在做操作之前先check一下这个user是否有这个操作的权限。
如果你想让request和liferay里面的一样,你需要去继承PortletActionServlet,并且在里面写上一些Events,listener,liferay很次request里面都会有一堆的信息,都是在这些Events,listener里面处理的,但是具体是那些我还没搞明白。
评论
2 楼
yaokaiwen99
2011-11-18
大哥求一个简单的flexigrid在liferay中应用的例子。我也是那么写的URL,不调用ACTION,也不报错。
1 楼
gaigai511225
2011-11-17
你好 插件环境那个url 具体怎么写 我照您的方式写了出错 没有调用action
发表评论
-
JSR 286 Portlet 的新特性,第 3 部分: Portlet 过滤器和 Portlet 窗口
2010-06-01 10:24 2449在 本系列 的 第 1 部分 简要回顾了JSR 1 ... -
JSR 286 Portlet 的新特性,第 2 部分: 资源服务、事件与共享呈现参数
2010-05-31 18:42 2176在本系列的 第 1 部分 简要回顾了 J ... -
JSR 286 Portlet 的新特性,第 1 部分: Portlet 2.0 新特性介绍
2010-05-31 17:55 2326本系列文章专门针 ... -
Session share
2010-05-14 12:18 0Tomcat Server.xml <Servi ... -
Liferay集群负载均衡配置
2009-10-30 11:14 4837先介绍一下项目系统的环境, Liferay Version: ... -
Liferay 集群部署
2009-10-30 00:00 0十二点了,明天断续 -
Liferay 权限策略
2009-10-29 23:45 3060先上一张大家都很熟悉的图 这张图可以说是整 ... -
Liferay Portlet之间的通信
2009-10-29 19:12 4931从我做Liferay到现在,这个问题一直都存在着,直到最近我才 ... -
Liferay异步刷新
2009-10-29 18:05 3132Liferay portlet异步刷新,分为两种情况。 ... -
准备开始整理半年来对lifeay新的学习成果
2009-10-29 18:04 1456有半年没有写过liferay的blog了,不过对life ... -
Ajax知识
2009-06-11 17:50 0<SCRIPT LANGUAGE=" ... -
改变Liferay Portal Context(让Liferay不在使用ROOT目录)
2009-05-25 22:46 1782在部署的时候如果遇到我们会遇到让liferay与其他的项目并存 ... -
velocity调用DB持久层,生成actionurl
2009-05-22 17:42 1134#set($hostelCacheService = $ser ... -
liferay 所有版本下载地址
2009-05-21 13:29 3116从1.7.5一直到现在的5.2.3,应有尽有。 htt ... -
liferay ldap配置与相关代码
2008-11-28 11:06 37411.下载LDAP server 并安装, liferay支 ... -
liferay 的加密技术(CRYPT,SHA,SSHA,MD2,MD5)
2008-11-27 15:59 4179package com.liferay.util; impo ... -
liferay openid配置与代码详解
2008-11-21 21:14 27631.liferay的openid的配置很简单的,先去 open ... -
liferay验证码认证
2008-08-27 15:26 2637生成验证码相关: /** * Copyright (c ... -
很烦,想站在阳台上大声的喊
2008-08-20 19:42 1774终于到回家了,好累, ... -
网络爬虫相关(自已记下来,怕以后忘记)
2008-08-16 13:15 1901package com.taobao.html; impor ...
相关推荐
Liferay Portal Liferay IDE
Liferay中的AUI框架,官方叫做Alloy,是一个UI超框架,能为浏览器的三方面,结构,风格和表现建立网络应用提供连续的简单的API。 它融合了三种设计语言:HTML, CSS 和 JAVA。 准确来说AUI是Liferay在YUI的基础上...
liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南
打开Liferay IDE,Window-->Preferences-->Server-->Runtime Environment,点击右边Add…,在弹出的服务器选择里面选择Liferay,Inc-->Liferay v6.1 CE (Tomcat 7),请打“Create a new location server”打上勾。...
liferay 超级学习文档 liferay 框架 java hibernate liferay 不用多说
Liferay Themes[1].pdf Liferay+CMS系统培训.ppt Liferay+Portal+数据库介绍+.doc Liferay+权限管理.doc liferay-portal-5-2-systems-development-sample-chapter-5-managing-pages[1].pdf ...
Liferay is a different portal. 10分下载的, 打包5折提供下载. Part 1 Introduction to Liferay 1. Liferay is a different portal 2. Getting started with the Liferay development platform Part 2 Adding ...
Liferay Web内容管理指南Liferay
Liferay 6 入门教程
liferay 二次开文档
liferay tune
liferay6.2开发指南liferay6.2开发指南.doc
这是本人工作了2年有关liferay中的所有技术详细日记 很珍贵
liferay快速入门quickstart
Liferay教程
全面的liferay表结构详细描述,为liferay开发提供支持
liferay文档 给初学liferay的人
包括liferay的用户配置,系统接口,包括Liferay Portal 6 企业应用开发,Liferay 用户开发接口,Liferay+in+Action,Liferay 系统开发等
liferay portlet form 机制
Liferay in Action,Liferay Portal Systems Development,Liferay User Interface Development,还有几个中文文档