博文

struts插件 plug-in(2007-03-13 10:45:00)

摘要:n   问题: 有时候你需要在应用程序启动时装载一些数据到程序上下文中或执行某些操作。 n   解决方法: 创建一个实现了org.apache.struts.action.PlugIn接口的类文件并在struts-config.xml中设置plug-in元素。以下代码片段显示了一个plug-in生命声明和一个自定义的set-property子元素: <plug-in className="com.oreilly.strutsckbk.CustomPlugin" >   <set-property property="customData"                    value="Hello from the plugin"/> </plug-in> n   细节讨论: Struts提供一个 PlugIn接口能使你在启动应用程序时为你提供自定义的操作。其源代码如下: package org.apache.struts.action;   import javax.servlet.ServletException; import org.apache.struts.config.ModuleConfig;   public interface PlugIn {     void destroy();     void init(ActionServlet servlet, ModuleConfig config)         throws ServletException; } 要实现一个plug-in,你只需要实现这个接口并在struts-config.xml文件的中声明plug-in元素。子类必须实现方法destroy()和init()。init()在ActionServlet启动时......

阅读全文(4793) | 评论:2

tiles标记库(2007-03-13 10:44:00)

摘要:参见《精通Struts基于MVC 的Java Web设计与开发.pdf》的16章。这里做些补充说明。 配置tiles插件 在 struts-config.xml里:  struts-config.xml:   <plug-in className="org.apache.struts.tiles.TilesPlugin">     <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>   </plug-in>   模块化tiles 在特定的模块配置文件里定义一个tiles plugin时,这个tiles只应用于他所在的模块。命名方式可以是tiles-defs-module1.xml 在tiles定义文件里用到的路径必须是上下文相关的,而不是模块相关的。......

阅读全文(2014) | 评论:1

nested标记库(2007-03-13 10:43:00)

摘要:它的出现在只要为了解决两个问题 1.  如果嵌套层次结构中的一个对象发生改变,则必须更新每个嵌套的引用。 2.  当使用一个具有若干字段的嵌套对象时需要重复列出每个字段的全部嵌套层次结构。如“student.family.fatherName”。 大部分嵌套标记跟html一样,有三个新的标记 nested:nest 定义一个嵌套级别 nested:writeNesting 输出当前字段的完整嵌套级别 nested:root 定义根级别 注意:当定义一个嵌套的JavaBean时,初始化时要给他创建实例。如: SomeBean some = new SomeBean();而不是想下面一样简单的声明: SomeBean some; 一个实例 /taglib/nest/index.jsp:       <html:form action="/student">         <nested:nest property="student">              姓名:<nested:text property="name"/><br>                           年龄:<nested:text property="age"/><br>                         <nested:nest pro......

阅读全文(3293) | 评论:0

logic标记库(2007-03-13 10:41:00)

摘要:逻辑比较运算 logic:equal/logic:notEqual logic:equal变量等于常量时结果为true,否则为false。 logic:notEqual变量不等于常量时结果为true logic:greaterEqual/logic:greaterThan logic:greaterEqual变量大于或等于常量时结果为true,否则为false。 logic:greaterThan变量大于常量时结果为true,否则为false。 logic:lessEqual/ logic:lessThan logic:lessEqual变量小于或等于常量时结果为true,否则为false。 logic:lessThan变量小于常量时结果为true,否则为false。 用法 所有比较运算标记都比较一个变量和一个常量的大小。如果结果为true,则执行标签主体的内容,否则不执行任何动作。 常量由value属性指定。变量可以有五种指定方法 1.  使用cookie属性指定变量为某个cookie的关键字的名称。 2.  使用header属性指定变量为HTTP头的某个关键字的名称。 3.  使用parameter属性指定变量为某个请求参数 4.  使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里 5.  使用name和property属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里 注意 1.         如果变量不存在则比较结果为false,而不是抛出异常。 2.         如果两个字符串都可以转换成数字,就比较数字的大小,否则进行字符串的比较如:
    <%
    request.setAttribute("str","100");
     %&......

阅读全文(3666) | 评论:0

bean标记库(2007-03-13 10:38:00)

摘要:bean:cookie 根据cookie的键检索一个cookie,将其值赋给在id属性,并保存在本地范围和页面范围里。 value和multiple功能跟header一样 当使用bean:write时,其name属性对应bean:cookie的id属性,property属性值必须是“value”。 bean:header bean:header标记用于将HTTP请求头中的某个信息的String对象存储在page范围和本地范围内的JSP脚本变量中。 如果指定了multiple属性。可以存储同一名称的多个标题。如:如果传入请求具有名称同为“Accept-Language”的两个标题,则将使用String[]数组来捕获每个标题值。然后将此数组存储在由id属性指定的JSP变量中。 value属性用于如果传入请求中不存在指定资源时指定一个默认值。 bean:parameter bean:parameter标记将HTTP请求参数保存在page范围和本地范围内的JSP脚本变量中。 指定了multiple属性可以将同名参数的多个参数值保存到page范围和本地范围内的一个数组(String[])中。 value属性表示:如果name属性指定的要查找的参数不存在,则则将创建一个新的String对象,并将value属性的值赋给这个对象,然后同时存储在page范围和本地范围里 bean:page 检索JSP隐式对象,包括application, config, request, response,和 session,然后放在本地范围和页面范围里。 id属性值不能为application, config, request, response,和 session。因为此标签会将变量保存在本地范围里。但本地范围已经存在application, config, request, response,和 session这些变量了。其实此标签的主要功能是将这些隐式对象保存在页面范围里了。用bean:write只能在page不能读取存放在本地范围里的变量。 访问Web资源 bean:message 访问指定资源束的一个键值对。 bundle属性指定使用哪个资源束 key指定关键字的名称 locale 用于限定语言环境 scope 指定查找name属性指定的对象时的......

阅读全文(3214) | 评论:0

补遗(2007-03-13 10:36:00)

摘要:有些标记是“精通Struts基于MVC 的Java Web设计与开发.pdf”中被讨论到的 html:image 生成一个HTML的<input type=”image”>标记 html:javascript html:password 密码框 生成HTML的<input type=”password”>标记 html:textarea 可以使用cols和rows设定行列数 html:xhtml......

阅读全文(1712) | 评论:0

HTML标记库 - 错误信息标记(2007-03-13 10:35:00)

摘要:html:errors name属性:指定ActionMessages对象存放在request和session范围内的属性key。默认值为Globals.ERROR_KEY。 property属性:指定显示属性。如果此项没有则显示ActionMessages对象中的所有ActionMessage。 bundle属性:指定特定的资源束文件。 html:messages message属性:如果为true,则从request和session范围内检索出属性key为Globals.MESSAGE_KEY的ActionMessages对象,此时name属性无效。如果为false,则和html:errors一样根据name属性来检索ActionMessages对象, 如果此时没有设置name属性,将采用默认值GlobalsERROR_KEY。message属性的默认值为false。 id属性:用来命名从信息集合中检索出的每个ActionMessage对象,它和bean:write标记的name属性匹配。然后an:write将此信息输出。......

阅读全文(1928) | 评论:0

HTML标记库 - 文件上传(2007-03-13 10:34:00)

摘要:html:file 参考”struts学习笔记.doc” 自编的一个的文件上传类 com.cn.rolia.util.struts.upload .UploadUtil.java package com.cn.rolia.util.struts.upload;   import org.apache.struts.upload.FormFile;   import java.io.BufferedOutputStream; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashSet; import java.util.Iterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;   /**  *  * @author rolia  *  */ public class UploadUtil {          /*           * FormFile,表示要上传的文件           */          FormFile file;          /**        &nb......

阅读全文(4097) | 评论:0

HTML标记库 - 下拉列表多选列表(2007-03-13 10:31:00)

摘要:html:select html:select 生成一个HTML的<select>标记,可以使用multiple 属性创建单选或多选列表。 multiple属性设置是否可以多选 size 设置页面显示多少个,单选默认为1,多选默认为全部。 html:option label值有两个来源: 1.  <html:option>和</html:option>之间的内容 <html:option value=”1”>大一</html:option> 2.  使用html:option标签的key、locale和bundle属性 <html:option value=”1” bundle=”school” key=”grade”/> bundle指定资源束,locale指定特定的语言环境,key指定资源束中的特定键。 在struts-config.xml中定义了如下的资源束: struts-config.xml: <message-resources parameter=”cn.rolia.struts. ApplicationResources” key=”school”/> html:options 可以将可选的值放到一个集合中,然后用html:options将此集合作为select的值。 先在页面范围里定义一个Vector,在html:option中的collection属性指定为这个Vector:     <%     Vector colors = new Vector();     colors.add(new org.apache.struts.util.LabelValueBean("粉红色","pink"));     colors.add(new org.apache.struts.util.LabelValueBean("紫色","purple"));     colors.add(new org.apache.struts.util.LabelValueB......

阅读全文(7775) | 评论:0

HTML标记库 - 检查框单选框(2007-03-13 10:30:00)

摘要:这些标签必须嵌套在html:form中使用 html:checkbox checkbox的值由value属性指定。
当提交表单时复选框被选中,则传递此参数,若没有被选中则不传递此参数。
eg: <html:checkbox property="mathScore" value="98"> 参数即为:mathScore=98
由此产生一个问题就是如果提交表单时checkbox未被选中则Form Bean里与此复选框对应的字段的值将仍然保存着。解决办法是在Form Bean里的reset()方法里对checkbox字段进行重置。即在reset()方法里设置当checkbox未被选中时表示的值。
eg:
jsp里:
<html:checkbox property="toUpperCase" value="true">转换成大写
Form Bean里:
reset(…){
 toUpperCase=false//初始状态为:不选中
}
若FormBean里的值与checkbox标签的value值相等则选中,否则当FromBean里的对应值为true或yes或on时,复选框被选中否则不选中,这同时产生一个问题:
如上例做如下改动:
jsp里:
<html:checkbox property="toUpperCase" value="false">不转换成大写
Form Bean里:
reset(…){
 toUpperCase=true//初始状态为:选中
}
初始状态下toUpperCase=true时,因为value跟FormBean里的toUpperCase值不等,则考虑FormBean的值,因为为true,所以复选框是处于被选中状态。
当保持选中状态时提交表单,则FormBean里的toUpperCase=false,因为value跟toUpperCase值相等,则复选框再次被选中。
也就是说不管FormBean里的toUpperCase的值是什么,JSP页面上的checkbox始终处于被选中状态。
处理办法是checkbox的值只能设置为true或yes或on。
chec......

阅读全文(4904) | 评论:0