(Portal 开发读书笔记) <namespace>
2012-04-26 14:21
447 查看
<portlet:namespace>标记的作用:
<namespace>标记的作用是为当前Portlet中的javascript函数,html元素以及js中的全局变量设定一个名字空间,并且这个名字空间最终会被某个字母-数字组成的字符串所替代,来防止当一个页面上组装了多个Portlet时候出现的名字冲突问题。
例如:
这样在某页面上就定义了一段只属于该页面所在Portlet的javascript代码。方法很简单,在全局变量以及javascript函数前面加上<portlet:namespace/>标记就可以,这样,最后当这个portlet被merge到portal页面时候,somevar变量和confirmSave()方法就是唯一的,就算其他的portlet也定义了这个名字的变量和方法也不会有冲突。而且,就算一个页面上引用了某个Portlet的多个实例,也不会冲突。
页面上使用这些全局变量和js函数也必须给出<namespace>标记
----
使用误区:
这种加上<namespace>的标记只可以用在Portlet页面上直接书写js的情况,如果某个Portlet页面用外部资源引入的形式引进某个外部的javascript文件,比如:
这种情况下,在外部的js中无需要<namespace>标记,因为名字空间问题会自动被jsp引擎所处理成内联的形式。
----
在表单中使用<namespace>
为了让Portlet所包含的html里面的表单元素在portal页面唯一,同样也要给表单以及表单里面的元素加上<namespace>前缀:
这时候,假如在最终merge的portal页面上有多个同样的输入框为book的元素,那么取得这个表单(我们想要的Portlet)中的输入值呢?
方法是在Portlet处理代码中,也要给每个这个元素名加上名字空间前缀 (Liferay的处理方法)
<namespace>标记的作用是为当前Portlet中的javascript函数,html元素以及js中的全局变量设定一个名字空间,并且这个名字空间最终会被某个字母-数字组成的字符串所替代,来防止当一个页面上组装了多个Portlet时候出现的名字冲突问题。
例如:
<script type='text/javascript'> var <portlet:namespace/>someVar = 10; function <portlet:namespace/>confirmSave() { return confirm("Do you want to save Book information?"); } </script>
这样在某页面上就定义了一段只属于该页面所在Portlet的javascript代码。方法很简单,在全局变量以及javascript函数前面加上<portlet:namespace/>标记就可以,这样,最后当这个portlet被merge到portal页面时候,somevar变量和confirmSave()方法就是唯一的,就算其他的portlet也定义了这个名字的变量和方法也不会有冲突。而且,就算一个页面上引用了某个Portlet的多个实例,也不会冲突。
页面上使用这些全局变量和js函数也必须给出<namespace>标记
<a href="<portlet:actionURL name="save"/>" onclick="javascript: return <portlet:namespace/>confirmRemove()">Save</a>
----
使用误区:
这种加上<namespace>的标记只可以用在Portlet页面上直接书写js的情况,如果某个Portlet页面用外部资源引入的形式引进某个外部的javascript文件,比如:
<script type="text/javascript" src="folder1/folder2/search/searchGadget.js"></script>
这种情况下,在外部的js中无需要<namespace>标记,因为名字空间问题会自动被jsp引擎所处理成内联的形式。
----
在表单中使用<namespace>
为了让Portlet所包含的html里面的表单元素在portal页面唯一,同样也要给表单以及表单里面的元素加上<namespace>前缀:
<form name="<portlet:namespace/>addBookForm"> <tr> <td> <input type="text" name="<portlet:namespace/>bookTitle"/> </td> <td> <div id="<portlet:namespace/>bookErrorMessage"></div> </td> </tr> ... </form>
这时候,假如在最终merge的portal页面上有多个同样的输入框为book的元素,那么取得这个表单(我们想要的Portlet)中的输入值呢?
方法是在Portlet处理代码中,也要给每个这个元素名加上名字空间前缀 (Liferay的处理方法)
@ProcessAction(name = "addBookAction") public void addBook(ActionRequest request, ActionResponse response) throws PortletException, IOException { //这里我们可以看到用response.getNamespace()则自动加上了名字空间,于是这个名字空间和表单元素名拼接起来的字符串就是在Portal页面上唯一并且只属于当前Portlet的了 String bookTitle = request.getParameter(response.getNamespace() + "bookTitle"); ... }
相关文章推荐
- (Portal 开发读书笔记) <defineObjects>
- (Portal 开发读书笔记)<actionURL><renderURL><resourceURL>
- (Portal 开发读书笔记)在portlet URL中使用<param>传递参数
- <<Android开发艺术探索>>读书笔记--IntentFilter
- <<Android源码设计模式解析与实战>>读书笔记----- Android NDK开发学习
- <<Android.游戏开发入门](美)Mario.Zechner>>读书笔记-----OpenGL ES概览
- <HTML5程序开发范例宝典(韩旭著)>读书笔记之页面风格切换实例
- <<轻松scrum之旅-敏捷开发故事>>读书笔记
- <<敏捷开发>>读书笔记
- <<Android开发艺术探索>>读书笔记--Activity LaunchMode
- <<测试驱动开发的艺术>>读书笔记
- 读书笔记--<精益和敏捷开发大型项目应用指南>
- Android开发艺术探索<Notification使用>
- <<Linux内核的设计与实现>>读书笔记(三)-Linux的进程
- <<UML for Java Programmers>> 第11章读书笔记
- iOS开发中(null)与<null>的处理
- <<精通iOS开发>>第14章例子代码小缺陷的修复
- <Test-Driven Development with Python>学习笔记 第一部分 测试驱动开发基础
- <玩转电商系统>读书笔记