`
mazhiyuan
  • 浏览: 64719 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HF servlet&jsp 总结—无脚本的JSP

阅读更多
8无脚本的JSP
8.1在JSP页面使用动作元素
<jsp:useBean id="person" class="foo.Person" scope="request" />
<jsp:getProperty name="person" property="name" />


如果useBean找不到一个叫person的bean就会自己创建这样一个类,来看看生成的servlet中的代码:
foo.Person person = null;

synchronized (request){  
person=(foo.Person)_jspx_page_context.getAttribute("person",PageContext.REQUEST_SCOPE);
  if(person == null){
    person = new foo.Person();   
    _jspx_page_context.setAttribute("person",PageContext.REQUEST_SCOPE);  
  }
}

但是通过这个方式创建的bean是没有属性值的,我们需要使用另一个动作元素setProperty
<jsp:useBean id="person" class="foo.Person" scope="request" />
<jsp:setProperty name="person" property="name" value="Fred" />

但是这样的命令当已经存在一个bean后,会将该属性的值替换,而没有达到创建一个新的属性的目的。

为了达到这一目的,我们需要使用有体的useBean:
<jsp:useBean id="person" class="foo.Person" scope="request">
<jsp:setProperty name="person" property="name" value="Fred" />
</jsp:useBean>
这时执行中间设置属性的代码是有条件的执行的,只有当在指定scopr和id中没有这个bean才会在创建这个bean之后,执行setProperty代码
若存在这个的bean就不会执行这个代码了

再看看生成的servlet中的代码
foo.Person person = null;
synchronized (request){  
person=(foo.Person)_jspx_page_context.getAttribute("person",PageContext.REQUEST_SCOPE);
  if(person == null){
    person = new foo.Person();   
	_jspx_page_context.setAttribute("person",PageContext.REQUEST_SCOPE);  
	
org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.finAttribute("person"),"name","Fred",null,null.false);
  }
}

8.2多态的bean引用
给useBean添加一个type属性

<jsp:useBean id="person" type="foo.Person" class="foo.Employee" scope="page" />
这样生成的servlet代码是:

foo.Person person = null;
if(person == null){
 person = new foo.Employee();
 ...
}
Class必须是type的一个子类或是实现

若使用了type但是没有class,会出现2种情况:
指定的scope和id中已经存在这样的bean,不会报错
否则会报错bean person not found with scope

8.3 param属性
<html><body>
<form action="TestBean.jsp">
 name:<input type="text" name="useName">
 ID#:<input type="text" name="userID">
 <input type="submit">
</form>
</body></html>

Testbean.jsp
<jsp:useBean id="person" type="foo.Person" class="foo.Emploee">
 <jsp:setProperty name="person" property="name" param="userName" />
</jsp:useBean>

在Testbean页面中不用脚本就可以获取传递来的属性值。

更好的解决方式
确保表单输入的请求参数名与bean中的属性名相同,如果是这样你就不必再<jsp:setProperty>标记中指定param属性了。如果指定了property,但是没有指定value或是param,就是通知容器,要从右匹配名的请求参数中得到值。

若Employee中有2个属性,name和userID,则可以这样写
<jsp:useBean id="person" type="foo.Person" class="foo.Emploee">
 <jsp:setProperty name="person" property="name"  />   这里什么都没有
</jsp:useBean>


还能更好的解决方式
确保表单输入的所有的请求参数名与bean中的属性名相同
<jsp:useBean id="person" type="foo.Person" class="foo.Emploee">
 <jsp:setProperty name="person" property="*"  />   这里一个*号解决所有问题
</jsp:useBean>


8.3TLD的对应关系

有函数的类

package foo;

public class DiceRoller{
 public static int rollDice(){
    return (int)((Math.random()*6)+1);
  }
}


标记库的描述文件 TLD
<?xml...>

<taglib xmlns=....>

<tlib-version>1.2</tlib-version>
<uri>DiceFunction</uri>
 <function>
   <name>rollIt</name>
   <function-class>foo.DiceRoller</function-class>
   <function-aignature>int rollDice()</function-aignature>
 </function>
</taglib>

jsp页面
<%@ taglib prefix="mm" uri="DiceFunction"%>
<html><body>
${mm:rollIt()}
</html></body>


注意这三个文件中的对应关系
分享到:
评论

相关推荐

    servlet实现身高体重比测试

    - EL是一种轻量级的脚本语言,用于简化JSP页面中的数据访问。它允许在JSP页面中直接访问JavaBean属性或其他上下文中的对象。 - EL表达式的语法通常为`${expression}`,例如 `${user.name}`,这将返回存储在`user`...

    HF之HTML&css

    HTML(HyperText Markup Language)是用于创建网页的标准标记语言,而CSS(Cascading Style Sheets)则是一种样式...无论是对于网页开发者,还是想要提升网页设计技能的人来说,"HF之HTML&css"都是一个很好的学习资源。

    HF-Userscripts:我自己的HF用户脚本列表

    HF用户脚本我自己创建的脚本列表。 用户脚本允许用户使用Java脚本在本地修改网页。 美国管理员(例如 )允许用户在现代浏览器中安装和管理其用户脚本。剧本以下是此存储库下列出的脚本以及简短说明。():用于HF的...

    ANSYS HF&SI产品新功能介绍.pdf

    ANSYS的HF&SI产品是电磁仿真领域的旗舰级解决方案,主要针对高频和信号完整性问题。在R17版本中,该产品引入了一系列的新功能,旨在提高设计效率、精确度和自动化程度,尤其对于电机高效率设计、电子散热、物联网、...

    HF9624用户手册V1.0(20190626).pdf_hf_HF-9624EU_hf9624说明书_HF9624_串口服务器

    HF9624串口服务器是一款专为串口设备联网设计的强大硬件,它提供了一整套功能完善的解决方案,使得串口设备能够轻松接入无线或有线网络。此设备支持Wi-Fi连接,同时具备10/100M以太网自适应能力,能够在不同网络环境...

    Vault Guide to PE & HF Interviews

    《Vault Guide to PE & HF Interviews》是一本专为求职者准备的指南,主要涵盖了私募股权(Private Equity, PE)和对冲基金(Hedge Fund, HF)行业的面试准备。这本书由Vault.com出版,并且根据Colin H. (hjiang4@u....

    HF & VUC Fyn-crx插件

    标题中的“HF & VUC Fyn-crx插件”指的是一个特定的浏览器扩展程序,用于增强HF & VUC Fyn平台的用户体验。HF & VUC Fyn可能是一个丹麦语的在线服务或者应用,专注于提供某种特定的功能或内容,如教育、信息传播或是...

    HF3FF与HF3FD系列 5脚 单刀双掷继电器封装及其应用说明-HF3FF_D.rar

    HF3FF与HF3FD系列继电器是电子产品设计中常用的一种元器件,尤其在自动控制、信号切换等领域有着广泛的应用。这两个系列的继电器都属于5脚单刀双掷(SPDT)类型,这意味着它们拥有一个输入线圈和两个可切换的输出...

    IBM x3650 M3 HF安装使用

    ### IBM x3650 M3 HF安装与使用详解 #### 一、概述 IBM x3650 M3 HF是一款高性能的企业级服务器,适用于多种计算密集型应用场景。该服务器采用了先进的技术和设计,旨在提供卓越的性能、可靠性和可扩展性。本文将...

    PW20_PW21_HF2211_HF2221_HF6208_HF9610_HF5122_1.40.5_20200426.zip

    标题 "PW20_PW21_HF2211_HF2221_HF6208_HF9610_HF5122_1.40.5_20200426.zip" 提供的是一个固件更新的压缩包文件,其中包含了多个汉枫(HF)设备的固件。这个特定的更新针对的是HF2211型号,版本号为1.40.5。发布日期...

    HF9.0线切割控制软件.rar

    HF9.0线切割控制软件的推出,无疑成为了这一领域中的佼佼者。本文将对HF9.0线切割控制软件进行全面的介绍,探讨其在智能化和高效加工方面的典范表现。 首先,HF9.0线切割控制软件通过一体化控制系统,实现了停电...

    hf线切割v8.0下载

    hf线切割v8.0下载

    HF线切割编控一体化系统|线切割编程|线切割编程教程--琛扬数控

    百度为您找到相关结果约758个HF线切割编控一体化系统|线切割编程|线切割编程教程--琛扬数控在编程中,HF系统均采用双精度计算;HF系统所生成的加工代码均采用绝对式的G代码,其数值精确保留到小数点第四位;HF系统在加工...

    CR95HF上位机开发源码和使用文档

    CR95HF上位机开发源码和使用文档。 包括CR95HF全协议栈在支持,ISO14443A,ISO14443B,ISO15693,ISO18092。 支持ST25DV产品在快速传输,模式管理。、 支持NDEF格式在NFC,包括类型2A,3,4A,4B,5等。 脚本可用。 包含...

    HF3FF继电器封装

    本篇文章将深入探讨HF3FF继电器的AD封装、JQC-HF3F-005型号及其在Altium Designer中的应用。 首先,让我们了解一下HF3FF继电器的封装。封装是指电子元件在电路板上的物理形状和尺寸,它决定了元件如何在PCB(印制...

    霍尼韦尔二维码扫描枪HF500使用手册

    下面将根据手册中的主要内容,总结出关于HF500的详细知识点。 首先,HF500扫描器的连接方式包括USB和RS232两种。在连接扫描器之前,需要关闭计算机电源,待扫描器完全连接后,再打开计算机电源。这样做的目的是为了...

    CR95HF操作命令介绍中文版

    ### CR95HF操作命令详解 #### 一、概述 CR95HF是一款高性能的射频识别(RFID)读写器芯片,广泛应用于各种近距离无线通讯(NFC)及RFID场景。本文将详细介绍CR95HF的部分核心操作命令及其功能,以便开发者能够更好地...

    应用密码学des

    &he0,&he2,&he4,&he6,&he8,&hea,&hec,&hee,&hf0,&hf2,&hf4,&hf6,&hf8,&hfa,&hfc,&hfe, _ &h1b,&h19,&h1f,&h1d,&h13,&h11,&h17,&h15,&h0b,&h09,&h0f,&h0d,&h03,&h01,&h07,&h05, _ &h3b,&h39,&h3f,&h3d,&h33,&h31,&...

    hf线切割v7.03下载 703.EXE

    hf线切割v7.03下载 703.EXE

Global site tag (gtag.js) - Google Analytics