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 %> - 展示结果10bfd7ad207.jpg 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表示编码。目录结构截图: 10bff7a0e02.jpg 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>如图:10bff8aa287.jpg另外,如果在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& gt; 当然,这种情况必须引入:<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %& gt;这个标签定义了。 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"/> |