在portlet页面中引入js或者css,通过c或者s标签
<!--jquery实际放的地方:/MyTask/WebContent/scripts/jquery-1.8.3.min.js-->
<script type="text/javascript" src="<c:url value="/js/jquery-1.8.3.min.js"/>"></script>
<script type="text/javascript" src='<s:url value="/scripts/jquery-1.8.3.min.js"/>'></script> <% String ctx = renderRequest.getContextPath(); %>
<script type="text/javascript" src="<%=ctx%>/js/ylUtil.js"></script>
portlet:resourceURL用法:

可理解成直接指向serveResource()方法的一个url

<!--使用resourceURL的时候需要把页面引入的portlet标签换成
<%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
-->
<portlet:resourceURL id="/WEB-INF/jsp/resource.jsp" var="resourceJsp">
<portlet:param name="vFlag" value="addAppTask"/>
</portlet:resourceURL>
<!-- 或者直接写成下面的酱紫-->
<portlet:resourceURL/>

portlet类里面写:

@Override
public void serveResource(ResourceRequest request, ResourceResponse response)
throws PortletException, IOException {
if (request.getResourceID()!=null) {
PortletRequestDispatcher prd =
getPortletContext().getRequestDispatcher(request.getResourceID());
String hehe = request.getParameter("vFlag");
System.out.println(hehe);
if (prd != null) {
prd.forward(request, response);
}
}
}
ajax乱码怎么办?
function addToLinks1(taskId,taskName,taskUrl,appId) {
var url = "<portlet:resourceURL />";
//发送ajax请求,加入参数,在portlet类中处理
alert(taskId+"\n"+taskName+"\n"+taskUrl+"]\n"+appId);
var postData = "taskId="+taskId+"&taskName="+taskName+"&taskUrl="+taskUrl+"&appId="+appId;
postData = encodeURI(postData);
//alert(postData);
yl.ajaxUtil.sendRequest(url, reqCallBack, postData);
}
function addToLinks(taskId,taskName,taskUrl,appId) {
var url ="<portlet:resourceURL />";
$.ajax({
type:"post",
url: url,
cache: false,
data: {taskId:taskId,
taskName:taskName,
taskUrl:taskUrl,
appId:appId},
dataType: "html",
contentType:"application/x-www-form-urlencoded; charset=UTF-8", //声明编码
success:function(data){ //提交表单
alert(data);
}
});
}
function reqCallBack(data){
alert(data.responseText);
} //这样子的时候是在前面的页面上面encodeURI两次之后再解码
//如果前后(提交表单的jsp与接受表单的servlet或者xxx)
//都是utf-8的时候把要提交的表单数据只encodeURI一次就好了
//System.out.println(URLDecoder.decode(request.getParameter("taskName"),"UTF-8"));
System.out.println(request.getParameter("taskName"));
自从有了<portlet:namespace />,妈妈再也不用担心我会在一个页面上面放很多一样portlet之后会有问题啦

namespace生成一个和portletResponse.getNamespace方法返回一样的唯一字符串,这个字符串主要功能是在一个Portal页面中有很多个相同的portlet的时候用来唯一确定一些dom元素

<a href="javascript:<portlet:namespace/>doFoo()">Foo</a>
回调函数加参问题,用闭包?还是叫匿名函数?

在调用sendRequest这个函数的时候,会有一个回调函数执行,sendRequest内部写法为:

sendRequest : function(url,callback,postData) {
var req = this.createXMLHTTPObject();
if (!req) return;
var method = (postData) ? "POST" : "GET";
req.open(method,url,true);
//req.setRequestHeader('User-Agent','XMLHTTP/1.0');
if (postData)
req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
req.onreadystatechange = function () {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
alert('HTTP error ' + req.status);
return;
}
callback(req);
}
if (req.readyState == 4) return;
req.send(postData);
},

是直接在自己本身内部生成的变量来作为回调函数的参数传入。然后呢,在自己函数(比如a)内部调用sendRequest的时候会为a传入我想要处理的dom对象作为参数,或者任意什么参数(比如b),在请求返回(执行回调函数的时机)时,如何把自己传入的b进行修改。但是sendRequest内部只为回调函数给了一个参数。
所以调用的时候只能自己写一个回调函数了,才能访问到当前a函数内部的一些东西。

yl.ajaxUtil.sendRequest(url,
function(data){
//TODO 这里可以做成只请求一次,如果有ul就不ajax。但是,
//但是,这样子之后在页面上加入链接之后不会即时显示出来
var tmpUl = obj.getElementsByTagName("ul");
if (tmpUl.length>0) {
obj.removeChild(tmpUl[0]);
}
var s = document.createElement("div");
s.innerHTML = data.responseText;
//alert(s.getElementsByTagName("ul"));
obj.appendChild(s.getElementsByTagName("ul")[0]);
//alert(data.responseText);
//alert(obj.id);
},
postData);
ajax请求返回值设置变量的问题

因为ajax的初衷之一就是不阻塞页面。所以,个人觉得用什么让sync为false完全是很xx。
但是这个问题要怎么解决才好呢。自己就亲手写过在一个页面上用for发送10条,然后sync为false。页面加载明显变慢4-5s。

把html代码转换成dom对象
var tmpUl = obj.getElementsByTagName("ul");
if (tmpUl.length>0) {
obj.removeChild(tmpUl[0]);
}
//通过innerhtml加入dom树之后则可以取到
var s = document.createElement("div");
//data.responseText 为 <ul><li>xxxxx</li>xxxxx</ul>
s.innerHTML = data.responseText;
//alert(s.getElementsByTagName("ul"));
//s.getElementsByTagName("ul")[0]即为第一个ul的dom对象。在此处,只有一个ul。
obj.appendChild(s.getElementsByTagName("ul")[0]);
portlet中通过processAction方法传值

在portlet类中的processAction方法中,可以通过参数ActionResponse调用setRenderParameter方法给render里面传值

Action 和 Event 请求参数

在action、event方法中接受到的参数不能传递到之后需要执行的render里面,在action方法中接受到的参数也不会传递到接下来执行的event方法中。如果确实需要在render中使用参数,需要在action、event的response调用setRenderParameter或者setRenderParameters方法。

response.setRenderParameter("hehe", "hehehehe");

在render里面取的时候(在jsp页面取,或者render方法中取)

<%=renderRequest.getParameter("hehe")%>
portlet中操作PortletPreferences
String size = request.getParameter("Size");
PortletPreferences pp = request.getPreferences();
pp.setValue("size", size);
pp.store();

取的时候

<%=renderRequest.getPreferences().getValue("size",null) %>
ylUtil.js加入trim函数
yl.str= {
/**
* 换掉字符串的前后空格
* @param str
* @returns str
*/
trim : function(str) {
/* 复习一下正则
正则在js中字面量定义的方式是:用 “/”和“/”包围起来的。
所以呢。/(^\s*)|(\s*$)/ 就表示一个正则
然后呢,后面加个g表示全局,TODO: 有什么意义
在呢,^ 这个东西代表一个字符串的开始
$ 代表一个字符串的结束
* 表示重复前边的表达式0-n次
() 用来分组
| 意思是或, 比如"z|food"能匹配z或者food,"(z|f)ood"可匹配zood或者food
\s 表示空 包括空格,制表符,换页,换行等等。等价于 [ \f\n\r\t\v] 。
*/
return str.replace(/(^\s*)|(\s*$)/g, "");
},
/**
* 包含trim,同时将&nbsp ;替掉
*/
//innerText总是支持的不够好,有时候innerHTML取到的会有&nbsp;
//写这个东西会不会有点多余呢。
trimNbsp : function(str) {
/*
下面的就是在全局把&nbsp; 这个东东换成 没有
要不要写成这样呢?
/(^\&nbsp\;*)|(\&nbsp\;*$)/g
试试之后上面的是在取头取尾
下面的会把字符串里所有的&nbsp;全给干掉
还是用上面的吧。
*/
return this.trim(str).replace(/(\&nbsp\;)*/g,"");
}
};

开发portlet中的一些问题记录,portlet:resourceURL用法,portlet中通过processAction方法传值的更多相关文章

  1. Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 .

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  2. (转)C#中Trim()、TrimStart()、TrimEnd()的用法 .

    C#中Trim().TrimStart().TrimEnd()的用法: 这三个方法用于删除字符串头尾出现的某些字符.Trim()删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个非空格 ...

  3. 转载C#中Trim()、TrimStart()、TrimEnd()的用法

    C#中Trim().TrimStart().TrimEnd()的用法:    这三个方法用于删除字符串头尾出现的某些字符.Trim()删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个 ...

  4. 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结

    史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...

  5. react + antiDesign开发中遇到的问题记录

    react + antiDesign开发中遇到的问题记录 一:页面中子路由失效: antiDesign的官方实例中,会把路由重复的地方给去重,而且路由匹配模式不是严格模式.所以我们需要在util.js ...

  6. 饿了么基于Vue2.0的通用组件开发之路(分享会记录)

    Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...

  7. Web开发从零单排之二:在自制电子请帖中添加留言板功能,SAE+PHP+MySql

    在上一篇博客中介绍怎样在SAE平台搭建一个html5的电子请帖网站,收到很多反馈,也有很多人送上婚礼的祝福,十分感谢! web开发从零学起,记录自己学习过程,各种前端大神们可以绕道不要围观啦 大婚将至 ...

  8. Android开发-Android Studio问题以及解决记录

    [Android开发] Android Studio问题以及解决记录   http://blog.csdn.net/niubitianping/article/details/51400721 1.真 ...

  9. 安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

    高德地图开发时需要导入的包在下面的网盘链接中:(由于高德地图api更新得太快,官网上最新的包使用起来没有之前的方便,所以以下提供最全面的原始包) 链接:http://pan.baidu.com/s/1 ...

随机推荐

  1. Codeforces Round 1153(div. 2)

    这场奇差.ABCD四题.179名. 但是E在现场有213个人做出. 描述一下我在35分钟做完D后的心路历程. 首先看到这道E,第一下想到的是把所有的横向和竖向的整列(行)求出相连的个数. 然后想如何能 ...

  2. 洛谷 P1439 【模板】最长公共子序列

    \[传送门啦\] 题目描述 给出\(1-n\)的两个排列\(P1\)和\(P2\),求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数\(n\), 接下来两行,每行为\(n\)个数,为 ...

  3. OSGI嵌入tomcat应用服务器(gem-web)——tomcat插件环境搭建

    相关的资源下载,参考:https://www.cnblogs.com/dyh004/p/10642769.html 新建普通的plugin工程 新建工程运行环境 在工程中,新建运行环境 新建存放运行环 ...

  4. (hdu 6030) Happy Necklace 找规律+矩阵快速幂

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6030 Problem Description Little Q wants to buy a nec ...

  5. 【学习总结】GirlsInAI ML-diary day-17-初始dataframe

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day17 认识dataframe 一种非常有用的数据类型,叫做"DataFrame",经常缩写为&qu ...

  6. NOIP2001提高组复赛B 数的划分

    题目链接:https://ac.nowcoder.com/acm/contest/249/B 题目大意: 略 分析1(记忆化搜索): 方法为减而治之,把n划分成k份的答案就相当于每次把n分成a,b两个 ...

  7. Hadoop Mapreduce分区、分组、二次排序

    1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2)定制了partitioner以将map的结果送往指定reducer的过程: map - partiti ...

  8. Python——字符格式化

    一.分类:%格式符方式,format方式 二.%格式符 1.%s——字符占位,%d——数字占位(十进制) a = ("%(name)s--%(age)d" % {'name':'x ...

  9. [模板] 匈牙利算法&&二分图最小字典序匹配

    匈牙利算法 简介 匈牙利算法是一种求二分图最大匹配的算法. 时间复杂度: 邻接表/前向星: \(O(n * m)\), 邻接矩阵: \(O(n^3)\). 空间复杂度: 邻接表/前向星: \(O(n ...

  10. Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】问题调查

    今天测试反应了一个问题,说接口返回的速度变慢了,并且返回的数据也不对.然后就找到了我o(╥﹏╥)o. 第一个反应就是查日志,不查不要紧,一查吓一跳,整个服务器上所有的站点都报错了.异常信息如下: Sy ...