把基于jsr168的Portlet开发的一些小技巧和小知识记录下来,作为一种备忘和知识积累,便于以后察看。
1 javabean的写法
- java页面的代码:
public void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
request.setAttribute("username","liuzhaoy ##################");
}
- jsp页面的写法
<jsp:useBean id="username" class="java.lang.String" scope="request"></jsp:useBean>
<%=username %>
- 展示结果
2 页面编码的写法
<%@ page import="javax.portlet.*, java.util.*" session="false"%>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portletAPI" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
如果让其支持汉语,就改为:gb2312喽,呵呵。
3 图片路径的写法
<IMG src="<%=renderRequest.getContextPath()%>/testportlet/images/mark.gif"><br>
<IMG src="<%=renderResponse.encodeURL(renderRequest.getContextPath()+"/testportlet/images/mark.gif")%>">
其中renderResponse.encodeURL表示编码。目录结构截图:
4 状态的保存
怎么让一个textbox框保持其状态呢,就是输入框里的内容在点击提交按钮后信息不会丢失。
jsp文件
<jsp:useBean id="saveUrl" scope="request" class="java.lang.String"></jsp:useBean>
<jsp:useBean id="username" class="java.lang.String" scope="request"></jsp:useBean>
<FORM method="post" action="<%=saveUrl %>">
<INPUT size="20" type="text" name="username" value="<%=username %>">
<input type="submit" name="save" value="Save"/>
</FORM>
--------------------------
java文件
声明一个变量:
private String UN=null;
在doView()方法如下:
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
request.setAttribute("username",UN);
PortletURL saveUrl=response.createActionURL();
saveUrl.setParameter("save","save222");
request.setAttribute("saveUrl",saveUrl.toString());
}
--------------------------
processAction()方法:
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException {
String saveStr=request.getParameter("save");
System.out.println(saveStr);
if(saveStr!=null){
// PortletPreferences prefs=request.getPreferences();
// prefs.setValue("userName",request.getParameter("username"));
// prefs.store();
String username=request.getParameter("username");
UN=username;
}
}
这样当点击Save按钮时,触发processAction()方法,给UN负值,即UN=username;然后doView()事件触发,在这里,给username负值UN,然后在jsp中用javabean接收即可,即:<jsp:useBean id="username" class="java.lang.String" scope="request"></jsp:useBean>如图:另外,如果在doView()中写了request.setAttribute("username",UN); 在jsp中用<%=renderRequest.getAttribute("username")%>可以直接接收的到,用这样的方法保存状态可能更简单些。:)
另外一种更简单的写法:
java文件的processAction()方法中:
if( request.getParameter(FORM_SUBMIT) != null ) {
response.setRenderParameter("saveValue",saveValue);
}
在jsp中直接接收即可:
<INPUT name="<%=Portlet01Portlet.FORM_TEXT%>" type="text" value="<%=request.getParameter("saveValue") %>"/>
5. 超链接的写法
超链接这个东西折磨了我好久,今天终于把它解决掉了。超链接主要使用renderURL来解决。可以这样理解,renderURL是actionURL的一种优化,Portlet开发过程中尽可能使用renderURL而避免使用actionURL,actionURL使用于确实有Action行为的情况,比如说,form标单的提交,persistent状态的改变,session的操作,preference的修改等。而renderURL通常用来操作portlet内容的导航。
renderURL的写法有两种。
1.使用标签
<portlet:renderURL var="pu2">
<portlet:param name="testURL" value="testURL2"/>
</portlet:renderURL>
我的超链接: <A href="<%=pu2%>">viewURL</A>
当然,这种情况必须引入:<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>这个标签定义了。
2.写程序
<%
PortletURL pu=renderResponse.createRenderURL();
pu.setParameter("testURL","urlTest");
%>
<A href="<%=pu %>">testHref</A>
3. 直接使用标签
<%
String dd="hello portal";
%>
<A href="<portlet:renderURL><portlet:param name="startPos" value="<%=dd %>"/></portlet:renderURL>"><%=dd%></A>
不管那种写法,都会触发render()函数,此函数是父类GenericPortlet的一个方法,这里属于覆盖。如下:
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
// super.render(request, response);
String markValue=request.getParameter("mark");
PortletContext context=getPortletConfig().getPortletContext();
if(markValue!=null){
if(markValue.toString().equals("test01")){
context.getRequestDispatcher("/portlet01/webApp/test01.jsp").include(request,response);
}
else if(markValue.equals("homepage")){
request.setAttribute("saveValue",saveValue);
context.getRequestDispatcher("/portlet01/jsp/html/Portlet01PortletView.jsp").include(request,response);
}
else if(markValue.equals("test02_new")){
if(request.getParameter("mark_test02")!=null){
request.setAttribute("hasButton","true");
}
context.getRequestDispatcher("/portlet01/webApp/test02.jsp").include(request,response);
}
}
else{
doView(request,response);
}
}
根据设置的testURL参数值,来判断链接的文件。
5. 获取portlet.xml中的初始值:
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
System.out.println(getPortletConfig().getInitParameter("view"));
}
---------------------------
portlet.xml文件
<init-param>
<name>view</name>
<value>/fragments/portletrequest/view_portletrequest.jsp</value>
</init-param>
系统会打印出/fragments/portletrequest/view_portletrequest.jsp来,这样,可以把一些值放到这里面在程序中获取。
6. 用renderRequest负值,在jsp页面直接接收
java页面
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
String viewParam=request.getParameter("linkParam2");
request.setAttribute("voteResult_titleID",viewParam);
}
jsp页面
<%
out.println("----"+request.getAttribute("voteResult_titleID"));
%>
7. Action提交时保持跳转状态
jsp页面
<form name="form1" method="post" action="<portlet:actionURL><portlet:param name="jumpPath" value="<%=request.getRequestURI() %>"/><portlet:param name="inquireIdAnswerQuestion" value="<%=inquireIdStr %>"/></portlet:actionURL>" onsubmit="return answerSubmit(this)">
<input type="submit" name="inquireAnswerQuestion" value="保 存" class="font13">
</form>
--------------------------
java页面
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException {
if(request.getParameter("inquireAnswerQuestion")!=null){
String jump_Path=request.getParameter("jumpPath");
String idInquireStr=request.getParameter("inquireIdAnswerQuestion"); //获取ID编号
response.setRenderParameter("inquireID",idInquireStr);
System.out.println(idInquireStr);
jumpPath=rtnPath(jump_Path);
}
}
private String rtnPath(String path){
int dealPathDivideDot=path.indexOf("/vote/");
String jumppath=path.substring(dealPathDivideDot);
return jumppath;
}
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
if(jumpPath!=null){
String voteTitleId=request.getParameter("voteTitleID");
context.getRequestDispatcher(jumpPath).include(request,response);
}
}
这里主要的思想就是通过<%=request.getRequestURI() %>获取本页的路径,然后通过<portlet:param name="jumpPath" value="<%=request.getRequestURI() %>"/> 进行参数传递,注意<portlet:actionURL>的参数传递方式和<portlet:renderURL>是一样的,然后再在processAction()中通过String jump_Path=request.getParameter("jumpPath");进行接收,给公共变量jumpPath负值后,在render()中就完成了跳转。
--------------------------
新认知例子
1.怎么让页面上的renderRequest不会出现出错提示呢,经过这样类型转换后即可
RenderRequest renderRequest =(RenderRequest)request.getAttribute("javax.portlet.request");
RenderResponse renderResponse =(RenderResponse)request.getAttribute("javax.portlet.response");
PortletConfig portletConfig =(PortletConfig)request.getAttribute("javax.portlet.config");
原来用问号的方式也可以传递参数,不错
Code in the portlet
String path = "/jsptest/jsp/html/testCase.jsp?name=Hailey";
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(path);
rd.include(request,response);
Code in JSP
Hello <%= renderRequest.getParameter("name") %>
JSTL标签,用它可以读属性文件,不错,避免把一些东东写死在java文件里,便于管理
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:setBundle basename="nls.NLSExample"/>
<fmt:message key="message"/>
累了,去
读意优休息一下下,QQ空间,美文,非主流,网络日记,搞笑短信,祝福短信,热门短信,有意思啊
分享到:
相关推荐
webSphere-jps-plugin.jar
总结,Spring Web MVC与Portlet的整合为开发者提供了更强大、更灵活的portlet开发方式。通过结合Spring的MVC功能,portlet可以更好地处理复杂的业务逻辑,同时保持portlet本身的独立性和可复用性。理解并熟练掌握...
JSR 168定义了portlet容器和portlet之间的合同,为portlet开发提供了一套标准化的API。 IBM Portlet API是IBM WebSphere Portal服务器在JSR 168发布之前采用的自定义portlet API。虽然JSR 168的推出旨在消除portlet...
本文将深入探讨“web-form-portlet.rar_portlet_web form”这个主题,介绍如何开发Web表单(Web Form)以及如何利用插件进行Portlet开发。 一、Portlet简介 Portlet是Java Portlet API规范定义的一种组件模型,它...
在Portlet开发中,portlet与传统的Web应用有所不同,它运行在portlet容器中,如Liferay或WebSphere Portal。Portlet有自己的生命周期,包括初始化、渲染、事件处理等阶段。Struts2 Portlet插件则允许开发者使用...
### Portlet开发指南知识点概述 #### 一、Portlet简介 **什么是Portal?** Portal是一种Web应用程序,它为用户提供了一个集中的入口点来访问各种不同的应用程序和服务。Portal通常包括多种功能,如新闻、天气预报、...
Spring MVC Portlet 3.0利用这些新特性,简化了portlet开发流程,并提供了更好的性能和用户体验。 要开始一个Spring MVC Portlet项目,你需要安装IBM WebSphere Portal Server和相关的开发工具,如IBM Rational ...
Websphere-HTTPS配置.doc
这对于教育机构来说具有显著的优势,可以根据自身需求定制portlet功能,同时也可以为开发人员提供学习和实践portlet开发的机会。此外,开源社区通常活跃,用户可以通过参与社区获得技术支持和持续的更新。 ...
IBM-websphere-MQ使用说明.doc
在本文中,我们将深入探讨“蚊子总结的portlet开发”所涵盖的关键知识点,旨在帮助开发者更好地理解和实践portlet的开发。 1. **portlet概述**: - Portlet是Java Portlet API定义的一种组件模型,主要应用于企业...
"Bobby Woolf:从何学习 WebSphere-应用服务器-中间件.mht"这个文件可能包含了Bobby Woolf的讲解,他是IBM的一位资深技术专家,他的指导往往深入浅出,对于理解WAS的概念和实践非常有帮助。 【中间件的作用】: ...
WebSphere-Web服务器安全配置基线.doc
Portlet开发参考手册是针对portlet技术的一份详细指南,它为开发者提供了全面的指导,以帮助他们构建和集成portlet到Web门户中。Portlet是一种可重用的Web组件,它们在门户环境中运行,允许用户自定义门户界面,展示...
综上所述,"appconnector-portlet-local"项目是一个涉及到Javaportlet开发、服务集成和用户体验优化的项目。开发者需要熟悉portlet生命周期、MVC架构、服务交互以及性能和安全方面的最佳实践。通过阅读和分析源代码...
在部署阶段,"financial-aid-portlet"会被上传到支持JSR 286的门户服务器,如Liferay或IBM WebSphere Portal。一旦部署成功,用户就可以在门户界面中找到这个portlet,通过简单的点击和交互就能查看经济援助的相关...
### IBM WebSphere Portlet Factory 知识点解析 #### 一、概述 IBM WebSphere Portlet Factory 是一款专为快速开发、部署门户应用中的 Portlet(门户小部件)而设计的强大工具。它提供了丰富的功能与简便的操作流程...
在"portlet开发资料.rar"这个压缩包中,包含了关于portlet开发的一系列文档,这些文档可能详细介绍了portlet开发的基础到高级概念,帮助开发者从入门到精通掌握portlet开发。 1. **portlet的概念与作用**: - ...