`
xls
  • 浏览: 112144 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WebSphere-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 %>
- 展示结果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>
我的超链接:&nbsp;&nbsp;<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"/>
分享到:
评论

相关推荐

    Portal 开发详解

    - 在提供的“Portal6开发.pdf”电子书中,读者可以找到更详细的技术指南,涵盖Portal开发的各个方面,包括Portlet开发实战、Portal服务器配置、安全策略等。 7. **学习与实践** - 掌握Java和Web开发基础:Portal...

    webshere portal 网站集成方法

    - **IBM Rational Application Developer/Rational Software Architect**:这两款工具集成了对Portlet开发的支持,包括代码编辑、调试以及与WebSphere Portal的集成测试等功能。通过这些工具,开发者可以快速构建出...

    某企业知识门户解决方案.ppt

    在这个解决方案中,广州联拓软件技术开发有限公司利用IBM的WebSphere Portal和Lotus KM产品,为企业打造了一个高效、安全且具有高度个性化的知识门户。 **遇到的问题** 企业在信息化建设过程中常常面临以下挑战: ...

    多层电梯自动化系统:基于TIA Portal与S7-1200的PLC程序组态仿真及应用 自动化控制

    内容概要:本文介绍了基于西门子TIA Portal平台和S7-1200控制器的三层电梯PLC程序组态仿真全过程。文中详细描述了不同楼层间电梯响应机制的基本逻辑和复杂逻辑处理方法,以及如何利用梯形图(Ladder Logic)或功能块图(Function Block Diagram)编写程序代码。此外,还涵盖了WinCC软件用于创建仿真界面的具体操作,包括楼层指示器、按钮和呼梯显示器的设计与实现。最后,通过对整个项目的总结,分享了项目实施过程中的关键技术和实践经验。 适合人群:从事工业自动化领域的工程师和技术人员,特别是那些希望深入了解PLC编程及其仿真技术的人群。 使用场景及目标:适用于教学培训、工程项目规划和技术研究等领域。主要目的是帮助读者掌握PLC控制系统的设计思路,提高解决实际工程问题的能力。 其他说明:文中强调了编程技能、逻辑思维能力和对客户需求及设备原理深刻理解的重要性,这些都是成功完成此类项目不可或缺的因素。

    K003-调试工具-旧-TcpIpDebug-TCP通讯.zip

    K003_调试工具_旧-TcpIpDebug-TCP通讯.zip

    基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码

    基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码,个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+GCN+BERT的中文文本分类Python实现源码基于CNN+RNN+G

    机器学习训练数据 真人与机器识别

    机器学习训练数据 真人与机器识别

    实训商业源码-最新PHP交友盲盒系统源码-论文模板.zip

    实训商业源码-最新PHP交友盲盒系统源码-论文模板.zip

    玫瑰叶子病害检测数据集VOC+YOLO格式3699张4类别

    玫瑰叶子病害检测数据集VOC+YOLO格式3699张4类别.docx

    永磁同步电机单矢量及多矢量模型预测电流控制仿真研究

    内容概要:本文详细介绍了基于单矢量及多矢量模型的永磁同步电机电流预测控制仿真模型。首先,通过对永磁同步电机(PMSM)的特性分析,建立了定子电流预测模型,用于预测不同定子电压激励作用下的电流响应。接着,文章阐述了电流环输出的计算方法以及通过价值函数在线优化来选择最优控制结果。此外,还探讨了双矢量、三矢量及改进三矢量模型的应用及其优势,强调了这些模型在提高电流控制精度和适应复杂运行环境方面的潜力。最后,指出预测电流控制的优势在于其实现了解耦控制并能提供最优控制结果。 适合人群:从事电机控制系统研究的技术人员、高校相关专业师生、自动化工程领域的研究人员。 使用场景及目标:适用于希望深入了解永磁同步电机电流控制技术的研究人员和技术开发者,旨在提升电机控制系统的效率和精度。 其他说明:文中不仅提供了理论分析,还包括具体的建模方法和优化策略,有助于读者全面掌握永磁同步电机电流预测控制的关键技术和应用场景。

    基于python实现的语音情绪分析+源码+项目文档(毕业设计&课程设计&项目开发)

    基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于python实现的语音情绪分析+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档

    实训商业源码-源码资源站emlog模板-论文模板.zip

    实训商业源码-源码资源站emlog模板-论文模板.zip

    价值6000刀的新版Ai企业级系统去授权完美运行

    Al企联系统去授权版新鲜出炉 授权了一款市面上新出的AI企联系统 整体感觉页面还算不错,功能也还行,没有公众号也可以完美搭建 好像是全开源,可随意二开,我也没太注意。 项目uniapp开发的,支持3.5 4.0 Mj 此套系统5端适配,Web+H5+微信小程序+抖音小程序+双端APP,支持流量主! 好像有能力的快手小程序那些也可以上线。 我没有搭建,只在本地运行了一下,下面的演示站也是官方的 所以凑乎的看吧。自己有能力的可以二开,UI后台也可以自己改。 官方部署文档:https://wisestai.feishu.cn/docx/Ug17d9Iq0o878ax41uDckFbTnxg

    【搜索引擎优化】搜索引擎使用指南:关键词选择、功能利用、信息评估及隐私安全注意事项综述

    内容概要:本文主要介绍了在使用搜索引擎时需要注意的事项,以帮助用户更高效、准确地获取信息。首先强调了关键词的选择与优化,包括使用精准关键词、尝试不同关键词组合以及排除无关词。其次,阐述了搜索引擎功能的利用,如高级搜索选项、语音搜索与图像搜索和垂直搜索引擎的使用。然后,从来源可靠性、内容相关性和信息时效性三个方面讲述了信息评估与筛选的重要性。接着,提醒用户注意隐私与安全,如保护个人信息和防范网络诈骗。最后,鼓励用户持续学习与优化搜索技巧,如学习新的搜索技巧并根据搜索结果反馈及时调整策略。; 适合人群:所有需要使用搜索引擎查找信息的人群,尤其是对搜索技巧有一定需求的学生、研究人员和职场人士。; 使用场景及目标:①提高搜索效率,减少无效信息的干扰;②确保搜索结果的可靠性和时效性;③保护个人隐私和安全;④掌握更多搜索技巧和方法。; 其他说明:本文不仅提供了具体的搜索技巧,还强调了信息评估的重要性,提醒用户在搜索过程中保持批判性思维,确保获取的信息既准确又可靠。同时,鼓励用户不断学习新的搜索技巧,适应搜索引擎的变化和发展。

    FactoryIO十字机械手组装工作站仿真实验程序——基于梯形图的工业自动化入门教程 PLC编程

    内容概要:本文介绍了如何使用梯形图编写程序来控制FactoryIO中的十字机械手组装工作站。主要内容涵盖软件环境配置(TIA Portal V16 和 FactoryIO 2.4)、程序逻辑设计以及具体的功能实现,如皮带的防堵、避让、分流等功能。文中还提供了一些简化的梯形图代码示例及其详细注释,帮助初学者更好地理解和掌握编程技巧。 适合人群:对工业自动化感兴趣的初学者,尤其是那些希望快速上手梯形图编程的人群。 使用场景及目标:本教程旨在引导读者从零开始搭建一个完整的十字机械手组装工作站仿真实验系统,使他们能够熟悉工业自动化编程的基本流程和技术要点。 其他说明:文章不仅提供了理论指导,还包括具体的实践操作步骤,鼓励读者亲自动手尝试,从而加深对所学知识的理解。

    基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)

    基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(高分项目)基于知识图谱的电影推荐系统的Python毕业设计项目源码(

    dataset2-master-0518.zip本数据集包含:12,500张图像,4种不同的细胞类型,可以用来检测和分类血细胞类型

    本数据集包含:12,500张图像,4种不同的细胞类型,可以用来检测和分类血细胞类型;本数据集包含:12,500张图像,4种不同的细胞类型,可以用来检测和分类血细胞类型

    电力电子领域4mos结构两相交错并联Buck-Boost变换器仿真及其三种控制方式分析 MatlabSimulink

    内容概要:本文详细介绍了基于4mos结构的两相交错并联Buck/Boost变换器的仿真研究。首先概述了此类变换器的基本构造和工作原理,接着重点讨论了三种不同的控制方式——开环控制、电压单环控制以及电压电流双闭环控制。文中不仅解释了各控制方式的工作机制,还对其连接方法进行了具体指导。实验结果显示,在这三种控制方式中,双闭环控制模式表现出色,尤其在电感电流均流方面效果显著,从而提高了系统的整体效率和稳定性。此外,文章还简要提及了一种单向结构(含两个MOSFET和两个二极管)的变换器,并将其与4mos结构进行了对比。最后,作者强调了matlab/simulink/plecs等仿真软件对于理解和优化这类变换器的重要价值。 适用人群:从事电力电子相关领域的研究人员和技术人员,尤其是那些希望深入了解Buck-Boost变换器内部运作机制的人士。 使用场景及目标:适用于需要评估不同控制策略对Buck-Boost变换器性能影响的研究项目;旨在帮助工程师选择最适合实际应用需求的设计方案。 其他说明:文中提供的仿真数据和结论有助于推动电力电子技术的发展,为未来更高性能的电源转换设备的研发提供理论依据。

    PHP微信抽奖系统源码.zip

    PHP微信抽奖系统源码

    基于python实现的对抗性样本攻击与防御+源码+项目文档(毕业设计&课程设计&项目开发)

    基于python实现的对抗性样本攻击与防御+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 该代码探究了一种对于图像的攻击与防御方法。使用多种对抗性样本生成方法,在标准数据集上批量生成对抗性样本,从而达到欺骗神经网络的效果。同时,对于已经生成的对抗性样本做某些图像变换,去除对抗性样本噪声(noise),从而消除对抗性样本的影响,达到防御的效果。 基于python实现的对抗性样本攻击与防御+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 该代码探究了一种对于图像的攻击与防御方法。使用多种对抗性样本生成方法,在标准数据集上批量生成对抗性样本,从而达到欺骗神经网络的效果。同时,对于已经生成的对抗性样本做某些图像变换,去除对抗性样本噪声(noise),从而消除对抗性样本的影响,达到防御的效果

Global site tag (gtag.js) - Google Analytics