﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JavaSky-文章分类-JSP</title><link>http://www.blogjava.net/java-hl/category/50432.html</link><description>JavaBird</description><language>zh-cn</language><lastBuildDate>Wed, 02 Jan 2013 01:53:28 GMT</lastBuildDate><pubDate>Wed, 02 Jan 2013 01:53:28 GMT</pubDate><ttl>60</ttl><item><title>Javascript 异步编程的4种方法</title><link>http://www.blogjava.net/java-hl/articles/393680.html</link><dc:creator>JavaBird</dc:creator><author>JavaBird</author><pubDate>Tue, 01 Jan 2013 10:34:00 GMT</pubDate><guid>http://www.blogjava.net/java-hl/articles/393680.html</guid><wfw:comment>http://www.blogjava.net/java-hl/comments/393680.html</wfw:comment><comments>http://www.blogjava.net/java-hl/articles/393680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/java-hl/comments/commentRss/393680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/java-hl/services/trackbacks/393680.html</trackback:ping><description><![CDATA[<p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">你可能知道，Javascript语言的执行环境是"单线程"（single thread）。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　所谓"单线程"，就是指一次只能完成一件任务。如果有多个任务，就必须排队，前面一个任务完成，再执行后面一个任务，以此类推。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; "><img src="http://images.cnitblog.com/cms/24634/201212/21175217-ad1bad38ff8d4aae9b1172f9b034d4ca.jpg" alt="" style="margin: 0px auto; padding: 0px; font-size: 12px; border: none; display: block; " /></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　这种模式的好处是实现起来比较简单，执行环境相对单纯；坏处是只要有一个任务耗时很长，后面的任务都必须排队等着，会拖延整个程序的执行。常见的浏览器无响应（假死），往往就是因为某一段Javascript代码长时间运行（比如死循环），导致整个页面卡在这个地方，其他任务无法执行。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　为了解决这个问题，Javascript语言将任务的执行模式分成两种：同步（Synchronous）和异步（Asynchronous）。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　"同步模式"就是上一段的模式，后一个任务等待前一个任务结束，然后再执行，程序的执行顺序与任务的排列顺序是一致的、同步的；"异步模式"则完全不同，每一个任务有一个或多个回调函数（callback），前一个任务结束后，不是执行后一个任务，而是执行回调函数，后一个任务则是不等前一个任务结束就执行，所以程序的执行顺序与任务的排列顺序是不一致的、异步的。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; "><img src="http://images.cnitblog.com/cms/24634/201212/21175227-94c74211b8ae403087c10f0ff42939d0.png" alt="" style="margin: 0px auto; padding: 0px; font-size: 12px; border: none; display: block; " /></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　"异步模式"非常重要。在浏览器端，耗时很长的操作都应该异步执行，避免浏览器失去响应，最好的例子就是Ajax操作。在服务器端，"异步模式"甚至是唯一的模式，因为执行环境是单线程的，如果允许同步执行所有http请求，服务器性能会急剧下降，很快就会失去响应。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　本文总结了"异步模式"编程的4种方法，理解它们可以让你写出结构更合理、性能更出色、维护更方便的Javascript程序。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　<strong style="margin: 0px; padding: 0px; color: #333333; ">一、回调函数</strong></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　这是异步编程最基本的方法。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　假定有两个函数f1和f2，后者等待前者的执行结果。</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; "><span style="margin: 0px; padding: 0px; color: #000000; ">f1(); f2();</span> </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　如果f1是一个很耗时的任务，可以考虑改写f1，把f2写成f1的回调函数。</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; "><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> f1(callback){ 　　setTimeout(</span><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> () { 　　　　</span><span style="margin: 0px; padding: 0px; color: #008000; ">//</span><span style="margin: 0px; padding: 0px; color: #008000; "> f1的任务代码</span> <span style="margin: 0px; padding: 0px; color: #000000; ">　　　　callback(); 　　}, </span>1000<span style="margin: 0px; padding: 0px; color: #000000; ">); }</span> </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　执行代码就变成下面这样：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">f1(f2); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　采用这种方式，我们把同步操作变成了异步操作，f1不会堵塞程序运行，相当于先执行程序的主要逻辑，将耗时的操作推迟执行。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　回调函数的优点是简单、容易理解和部署，缺点是不利于代码的阅读和维护，程序的流程会很混乱，而且每个任务只能指定一个回调函数。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　<strong style="margin: 0px; padding: 0px; color: #333333; ">二、事件监听</strong></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　另一种思路是采用事件驱动模式。任务的执行不取决于代码的顺序，而取决于某个事件是否发生。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　还是以f1和f2为例。首先，为f1绑定一个事件（这里采用的jQuery的<a href="http://api.jquery.com/on/" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">写法</a>）。</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">f1.on('done'，f2); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　上面这行代码的意思是，当f1发生done事件，就执行f2。然后，对f1进行改写：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; "><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> f1(){ 　　setTimeout(</span><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> () { 　　　　</span><span style="margin: 0px; padding: 0px; color: #008000; ">//</span><span style="margin: 0px; padding: 0px; color: #008000; "> f1的任务代码</span><span style="margin: 0px; padding: 0px; color: #000000; "> 　　　　f1.trigger(</span>'done'<span style="margin: 0px; padding: 0px; color: #000000; ">); 　　}, </span>1000<span style="margin: 0px; padding: 0px; color: #000000; ">); }</span> </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　f1.trigger('done')表示，执行完成后，立即触发done事件，从而开始执行f2。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　这种方法的优点是比较容易理解，可以绑定多个事件，每个事件可以指定多个回调函数。缺点是整个程序都要变成事件驱动型，运行流程会变得很不清晰。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　<strong style="margin: 0px; padding: 0px; color: #333333; ">三、发布/订阅</strong></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　上一节的"事件"，完全可以理解成"信号"。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　我们假定，存在一个"信号中心"，某个任务执行完成，就向信号中心"发布"（publish）一个信号，其他任务可以向信号中心"订阅"（subscribe）这个信号，从而知道什么时候自己可以开始执行。这就叫做<a href="http://en.wikipedia.org/wiki/Publish-subscribe_pattern" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">"发布/订阅模式"</a>（publish-subscribe pattern），又称<a href="http://en.wikipedia.org/wiki/Observer_pattern" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">"观察者模式"</a>（observer pattern）。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　这个模式有多种<a href="http://msdn.microsoft.com/en-us/magazine/hh201955.aspx" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">实现</a>，下面采用的是Ben Alman的<a href="https://gist.github.com/661855" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">Tiny Pub/Sub</a>，这是jQuery的一个插件。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　首先，f2向"信号中心"jQuery订阅"done"信号。</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">jQuery.subscribe("done", f2); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　然后，f1进行如下改写：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; "><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> f1(){ 　　setTimeout(</span><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> () { 　　　　</span><span style="margin: 0px; padding: 0px; color: #008000; ">//</span><span style="margin: 0px; padding: 0px; color: #008000; "> f1的任务代码</span><span style="margin: 0px; padding: 0px; color: #000000; "> 　　　　jQuery.publish(</span>"done"<span style="margin: 0px; padding: 0px; color: #000000; ">); 　　}, </span>1000<span style="margin: 0px; padding: 0px; color: #000000; ">); }</span> </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　jQuery.publish("done")的意思是，f1执行完成后，向"信号中心"jQuery发布"done"信号，从而引发f2的执行。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　此外，f2完成执行后，也可以取消订阅（unsubscribe）。</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">jQuery.unsubscribe("done", f2); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　这种方法的性质与"事件监听"类似，但是明显优于后者。因为我们可以通过查看"消息中心"，了解存在多少信号、每个信号有多少订阅者，从而监控程序的运行。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　<strong style="margin: 0px; padding: 0px; color: #333333; ">四、Promises对象</strong></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　Promises对象是CommonJS工作组提出的一种规范，目的是为异步编程提供<a href="http://wiki.commonjs.org/wiki/Promises/A" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">统一接口</a>。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　简单说，它的思想是，每一个异步任务返回一个Promise对象，该对象有一个then方法，允许指定回调函数。比如，f1的回调函数f2，可以写成：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">f1().then(f2); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　f1要进行如下改写（这里使用的是jQuery的<a href="http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">实现</a>）：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; "><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> f1(){ 　　</span><span style="margin: 0px; padding: 0px; color: #0000ff; ">var</span> dfd =<span style="margin: 0px; padding: 0px; color: #000000; "> $.Deferred(); 　　setTimeout(</span><span style="margin: 0px; padding: 0px; color: #0000ff; ">function</span><span style="margin: 0px; padding: 0px; color: #000000; "> () { 　　　　</span><span style="margin: 0px; padding: 0px; color: #008000; ">//</span><span style="margin: 0px; padding: 0px; color: #008000; "> f1的任务代码</span><span style="margin: 0px; padding: 0px; color: #000000; "> 　　　　dfd.resolve(); 　　}, </span>500<span style="margin: 0px; padding: 0px; color: #000000; ">); 　　</span><span style="margin: 0px; padding: 0px; color: #0000ff; ">return</span><span style="margin: 0px; padding: 0px; color: #000000; "> dfd.promise; }</span> </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　这样写的优点在于，回调函数变成了链式写法，程序的流程可以看得很清楚，而且有一整套的<a href="http://api.jquery.com/category/deferred-object/" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">配套方法</a>，可以实现许多强大的功能。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　比如，指定多个回调函数：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">f1().then(f2).then(f3); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　再比如，指定发生错误时的回调函数：</p><div style="margin: 5px 0px 0px; background-color: #f7f7f7; line-height: 25px; color: #232323; "><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 2em; padding: 0px; font-family: 'Courier New'; font-size: 12px; white-space: pre-wrap; word-wrap: break-word; ">f1().then(f2).fail(f3); </pre></div><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　而且，它还有一个前面三种方法都没有的好处：如果一个任务已经完成，再添加回调函数，该回调函数会立即执行。所以，你不用担心是否错过了某个事件或信号。这种方法的缺点就是编写和理解，都相对比较难。</p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　<strong style="margin: 0px; padding: 0px; color: #333333; ">五、参考链接</strong></p><p style="padding: 0px; font-family: verdana, Arial, Helvetica, 微软雅黑, sans-serif; color: #232323; line-height: 28px; background-color: #faffff; ">　　*&nbsp;<a href="http://sporto.github.com/blog/2012/12/09/callbacks-listeners-promises/" target="_blank" style="margin: 0px; padding: 0px; color: #1a64a2; text-decoration: none; ">Asynchronous JS: Callbacks, Listeners, Control Flow Libs and Promises</a></p><img src ="http://www.blogjava.net/java-hl/aggbug/393680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/java-hl/" target="_blank">JavaBird</a> 2013-01-01 18:34 <a href="http://www.blogjava.net/java-hl/articles/393680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中EL表达式的比较符号、字符串比较 </title><link>http://www.blogjava.net/java-hl/articles/393356.html</link><dc:creator>JavaBird</dc:creator><author>JavaBird</author><pubDate>Sat, 22 Dec 2012 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/java-hl/articles/393356.html</guid><wfw:comment>http://www.blogjava.net/java-hl/comments/393356.html</wfw:comment><comments>http://www.blogjava.net/java-hl/articles/393356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/java-hl/comments/commentRss/393356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/java-hl/services/trackbacks/393356.html</trackback:ping><description><![CDATA[<div><p>el表达式一般不直接用==判断是否相等 != &gt; &lt; &gt;= &lt;=之类的表示不等于 大于 小于 大于等于 小于等于,而是使用字母表示的表达式,他们的表示如下：</p> <p>== eq 等于<br /> != ne 不等于<br /> &gt;  gt 大于<br /> &lt;  lt 小于<br /> &gt;= ge 大于等于<br /> &lt;= le 小于等于</p><p><br /></p><p>字符串比较：</p><p>不需要双引号&#8220;&#8221;<br /></p><p>user.name eq '001'</p><p>user.name eq Lily</p></div><img src ="http://www.blogjava.net/java-hl/aggbug/393356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/java-hl/" target="_blank">JavaBird</a> 2012-12-22 17:35 <a href="http://www.blogjava.net/java-hl/articles/393356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Input参数详解 JSP页面 </title><link>http://www.blogjava.net/java-hl/articles/367010.html</link><dc:creator>JavaBird</dc:creator><author>JavaBird</author><pubDate>Thu, 22 Dec 2011 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/java-hl/articles/367010.html</guid><wfw:comment>http://www.blogjava.net/java-hl/comments/367010.html</wfw:comment><comments>http://www.blogjava.net/java-hl/articles/367010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/java-hl/comments/commentRss/367010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/java-hl/services/trackbacks/367010.html</trackback:ping><description><![CDATA[<div><div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"=""><p>Input表示Form表单中的一种输入对象，其又随Type类型的不同而分文本输入框，密码输入框，单选/复选框，提交/重置按钮等，下面一一介绍。 <br />1，type=text <br />输入类型是text，这是我们见的最多也是使用最多的，比如登陆输入用户名，注册输入电话号码，电子邮件，家庭住址等等。当然这也是Input的默认类型。 <br />参数name：同样是表示的该文本输入框名称。 <br />参数size：输入框的长度大小。 <br />参数maxlength：输入框中允许输入字符的最大数。 <br />参数value：输入框中的默认值 <br />特殊参数readonly：表示该框中只能显示，不能添加修改。</p> <p><br />&lt;form&gt; <br />your name: <br />&lt;input type="text" name="yourname" size="30" maxlength="20" value="输入框的长度为30，允许最大字符数为20"&gt;&lt;br&gt; <br />&lt;input type="text" name="yourname" size="30" maxlength="20" readonly value="你只能读不能修改"&gt; <br />&lt;/form&gt; <br />2，type=password <br />不用我说，一看就明白的密码输入框，最大的区别就是当在此输入框输入信息时显示为保密字符。 <br />参数和&#8220;type=text&#8221;相类似。 <br />&lt;form&gt; <br />your password: <br />&lt;input type="password" name="yourpwd" size="20" maxlength="15" value="123456"&gt;密码长度小于15 <br />&lt;/form&gt; <br />3，type=file <br />当你在BBS上传图片，在EMAIL中上传附件时一定少不了的东西：） <br />提供了一个文件目录输入的平台，参数有name，size。 <br />&lt;form&gt; <br />your file: <br />&lt;input type="file" name="yourfile" size="30"&gt; <br />&lt;/form&gt; <br />4，type=hidden <br />非常值得注意的一个，通常称为隐藏域：如果一个非常重要的信息需要被提交到下一页，但又不能或者无法明示的时候。 <br />一句话，你在页面中是看不到hidden在哪里。最有用的是hidden的值。</p> <p>&lt;form name="form1"&gt; <br />your hidden info here: <br />&lt;input type="hidden" name="yourhiddeninfo" value="cnbruce.com"&gt; <br />&lt;/form&gt; <br />&lt;script&gt; <br />alert("隐藏域的值是 "+document.form1.yourhiddeninfo.value) <br />&lt;/script&gt;</p> <p><br />5，type=button <br />标准的一windows风格的按钮，当然要让按钮跳转到某个页面上还需要加入写JavaS<wbr>cript代码 <br />&lt;form name="form1"&gt; <br />your button: <br />&lt;input type="button" name="yourhiddeninfo" value="Go，Go，Go！" on<wbr>click="window.open('http://www.cnbruce.com')"&gt; <br />&lt;/form&gt;</p> <p><br />6，type=checkbox <br />多选框，常见于注册时选择爱好、性格、等信息。参数有name,value及特别参数checked（表示默认选择） <br />其实最重要的还是value值，提交到处理页的也就是value。（附：name值可以不一样，但不推荐。）</p> <p>&lt;form name="form1"&gt; <br />a:&lt;input type="checkbox" name="checkit" value="a" checked&gt;&lt;br&gt; <br />b:&lt;input type="checkbox" name="checkit" value="b"&gt;&lt;br&gt; <br />c:&lt;input type="checkbox" name="checkit" value="c"&gt;&lt;br&gt; <br />&lt;/form&gt; <br />name值可以不一样，但不推荐&lt;br&gt; <br />&lt;form name="form1"&gt; <br />a:&lt;input type="checkbox" name="checkit1" value="a" checked&gt;&lt;br&gt; <br />b:&lt;input type="checkbox" name="checkit2" value="b"&gt;&lt;br&gt; <br />c:&lt;input type="checkbox" name="checkit3" value="c"&gt;&lt;br&gt; <br />&lt;/form&gt;</p> <p><br />7，type=radio <br />即单选框，出现在多选一的页面设定中。参数同样有name,value及特别参数checked. <br />不同于checkbox的是，name值一定要相同，否则就不能多选一。当然提交到处理页的也还是value值。</p> <p>&lt;form name="form1"&gt; <br />a:&lt;input type="radio" name="checkit" value="a" checked&gt;&lt;br&gt; <br />b:&lt;input type="radio" name="checkit" value="b"&gt;&lt;br&gt; <br />c:&lt;input type="radio" name="checkit" value="c"&gt;&lt;br&gt; <br />&lt;/form&gt; <br />下面是name值不同的一个例子，就不能实现多选一的效果了&lt;br&gt; <br />&lt;form name="form1"&gt; <br />a:&lt;input type="radio" name="checkit1" value="a" checked&gt;&lt;br&gt; <br />b:&lt;input type="radio" name="checkit2" value="b"&gt;&lt;br&gt; <br />c:&lt;input type="radio" name="checkit3" value="c"&gt;&lt;br&gt; <br />&lt;/form&gt;</p> <p><br />8，type=image <br />比较另类的一个，自己看看效果吧，可以作为提交式图片</p> <p>&lt;form name="form1" act<wbr>ion="xxx.asp"&gt; <br />your Imgsubmit: <br />&lt;input type="image" src="../blog/images/face4.gif"&gt; <br />&lt;/form&gt;</p> <p><br />9，type=submit and type=reset <br />分别是&#8220;提交&#8221;和&#8220;重置&#8221;两按钮 <br />submit主要功能是将Form中所有内容进行提交act<wbr>ion页处理，reset则起个快速清空所有填写内容的功能。</p> <p>&lt;form name="form1" act<wbr>ion="xxx.asp"&gt; <br />&lt;input type="text" name="yourname"&gt; <br />&lt;input type="submit" value="提交"&gt; <br />&lt;input type="reset" value="重置"&gt; <br />&lt;/form&gt;</p><p><br /></p></div></div>转自：<div>http://fengyehongyu.blog.163.com/blog/static/34400245201012704649823/</div><img src ="http://www.blogjava.net/java-hl/aggbug/367010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/java-hl/" target="_blank">JavaBird</a> 2011-12-22 14:25 <a href="http://www.blogjava.net/java-hl/articles/367010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>