不少时候在页面中为了布局的需要,下拉列表<select>的宽度需要设成比较小的值,这时如果恰巧它包含的选择项<option>的内容比较长,那么超出select宽度的部分将会被截断,如果option显示的内容又比较重要,必须完整地展现出来,或者你是个完美主义者,那这就成了一个不大不小的问题了。 在IE7+、Firefox中,由于支持了<option>的title属性,我们可以想办法给option标记设置title属性(内容可以与显示的值相同或者不同)。如果是已经做好的页面,不想再做太多改动,可以用下面的脚本,自动遍历页面上的所有<select>,给所有的option加上与text相同的title。 function SetOptionTitle() {     var selects = document.getElementsByTagName(“select”);     if (selects.length > 0)     {         for (var i = 0; i < selects.length; i++)         {             var options = selects[i].options;             if (selects[i].options.length > 0)             {                 for (var j = 0; j < options.length; j++)                 {                     if (options[j].title == “”)                         options[j].title = options[j].text;                 }             }         }     } } 很不幸的是,IE6并不支持<option>的title属性,这一方法在IE6下完全无效!鉴于目前的浏览器市场状况,我们还不得不尽力兼容IE6,所以只能另想其它办法。 我目前想到的办法是:当鼠标悬停到<select>时,创建一个这个下拉列表的副本,同时把焦点移到这个副本上,把副本的样式设成绝对定位,而且盖在原来的下拉列表上,宽度根据option的显示内容自动拉伸,当这个副本失去焦点,或者用户对它进行了选择操作后,获取副本的selectedIndex,赋给原来的select对象。具体代码如下: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title></title> <script type=”text/javascript”> function FixWidth(selectObj) {     var newSelectObj = document.createElement(“select”);     newSelectObj = selectObj.cloneNode(true);     newSelectObj.selectedIndex = selectObj.selectedIndex;     newSelectObj.onmouseover = null;          var e = selectObj;     var absTop = e.offsetTop;     var absLeft = e.offsetLeft;     while(e = e.offsetParent)     {         absTop += e.offsetTop;         absLeft += e.offsetLeft;     }     with (newSelectObj.style)     {         position = “absolute”;         top = absTop + “px”;         left = absLeft + “px”;         width = “auto”;     }          var rollback = function(){ RollbackWidth(selectObj, newSelectObj); };     if(window.addEventListener)     {… Read More


第1回 適切なエスケープ処理でXSSに備える 第2回 サーブレットコンテナが抱える問題を認識する 第3回 Validatorを利用した入力値チェックの注意点 最終回 安全なセッション管理を実現するために http://www.atmarkit.co.jp/fsecurity/rensai/struts01/struts01.html… Read More


模 型–视图–控制器(Model-View-Controller,MVC)体系突出了Servlets和JSP的优点,同时也令它们的缺点最小化。在 实现中,用户请求被发送到一个控制器servlet,该servlet决定请求的性质,并且根据请求的类型传送给适合的处理器。每个处理器都和一个特别的 模型相关,里面封装有商业逻辑来执行一些特别的函数集合。处理完毕后,结果会发送回处理器,处理器选择适合的视图显示它。 Struts最早于2002年5月作为Jakarta项目的组成部分问世,Jakata项目由Apache Foundation.运做。项目的创立者希望该项目的研究改进和提高Java Server Pages (JSPs)、servlet、标签库以及面向对象的技术水准。Struts为使用MVC体系来编写应用提供了一个架构。Struts使用 “ActionMapping”,它允许servlet将用户的请求转变为应用行为。ActionMapping通常指定一个请求的路径、在请求上进行动 作的对象类型,以及指定其它需要的属性。 Action对象作为ActionMapping的一个部分使用,负责处理请求,并且发送响应回适合的视图(通常是一个Web浏览器),或者传送请求至适合的模型。 在模型和视图间的桥是一个form bean,它可以通过继承org.apache.struts.action.ActionForm得到。form bean用来保存处理前的用户数据,或者显示返回给用户的模型数据。Struts包含有自定义的标签,它可以由创建的form bean中自动组合字段。 在实践中用户请求JSP页面,控制器servlet接收请求并决定由哪个应用处理它。Action对象传送该请求到包含有接收商业逻辑的 JavaBean中。商业逻辑bean将连接数据库并进行查询,接收结果,然后返回结果给Action对象。Action对象将结果作为请求的一部分存放 到一个form bean中。一旦收集完请求的全部数据,就可以格式化结果并且显示。最后是JavaServer Page以HTML表格的形式将结果显示出来。… Read More


Java を始める前提 プログラミングやコンピュータシステムについてかいつまんだ説明。 Java の基本規則 環境の初期導入から、基礎となる構文など。 Java のオブジェクト指向 オブジェクト指向の考え方から、Java におけるクラス開発の基礎。 UML UML 2.0 から EclipseUML の導入/利用。 コア・パッケージ 文字列、ラッパー、I/O、マルチスレッド、コレクションなど。 Java Applet/AWT GUI アプリケーションの基礎である AWT について。 GUI JFC/Swing AWT よりも新しい GUI の枠組みである Swing について。 RDB と JDBC データベースの主流である RDBMS とのインタフェースについて。 Servlet/JSP/bean Java 利用の主流であるサーバサイド・アプリについて。 XML & Java XML and Java 連携について。XML, DOM, SAX, JAXP, XSLTなど。 パフォーマンス JVM の仕組みとパフォーマンスについて。… Read More


uebu: Strutsのトラブルシューティングメモ: ここに書いてある原因と解決策はあくまで私がやったミスとその解決策であり、 その現象に対する原因や解決策がすべて書いてあるというわけではありませんのでご注意下さい! フォワード先が空白になる ・mapping.findForward()で指定したフォワード名がstruts-config.xmlのActionの定義に書かれていない。 ・Actionがexecuteメソッドをオーバーライドしていない。 またはメソッド名が間違っているため、正しくオーバーライドできていない。 ・Actionのexecuteメソッドのシグネチャが異なるため、正しくオーバーライドできていない。 JSP文書にアクセスするとJavaScriptエラー ・html:formタグのfocus属性に書かれた名前の入力欄(プロパティ)が存在しない。 サーブレット action が利用できません ・struts-config.xmlの構文エラー、 またはcontrollerタグやpluginタグに記述したクラスがロードできないなどの理由で、 ActionServletの初期化に失敗している。 →サーブレットコンテナのログを見て、エラー原因を解消します。 パス /****** に対するリクエストは無効です ・html:formのaction属性(など)として指定したパスが、struts-config.xmlに定義されていない。 javax.servlet.ServletException: Exception creating bean of class …: {1} ・struts-config.xmlのform-beanに書いたクラスが存在しない。 ・struts-config.xmlのform-beanに書いたクラスがActionFormを継承していない。 ・struts-config.xmlのform-beanに書いたクラスがインスタンス化できない (例:抽象クラス、引数のないpublicのコンストラクタがない) ・struts-config.xmlのform-beanに記述するDynaActionFormなどのクラス階層が間違っている。 org.apache.struts.action.とorg.apache.struts.validator.に特に注意。 ・DynaActionFormのつもりで間違ってActionFormと書いている。 ActionFormは抽象クラスなのでインスタンス化できません。 html:formの入力内容が自作Form Beanに保存されない ・ActionFormやValidatorFormではなく、DynaActionFormを継承してFormBeanを作っている。 HTTP Status 500: No action instance for path /***Action could be created ・struts-config.xmlでActionクラスに指定したクラスが見つからないか、インスタンス化できない。 パス… Read More


MVC–Struct: モデル(Model:ビジネスロジック–JavaBeans–Javaのクラスで実装しても、EJBを用いて実装してもよい) ビュー(View:プレゼンテーション–JSP) コントローラ(Controller:モデルとビューを制御–サーブレット) STRUCTSの基本動作 まず、ブラウザからHTTPリクエストが送られます。すると、コントローラであるSTRUTSのアクションサーブレット(STRUTS提供)は、指定のモジュールのリクエストプロセッサ(STRUTS提供するリクエスト処理を制御するクラス)へHTTPリクエストを転送します。リクエストプロセッサは、HTTPリクエスト中にフォーム情報がある場合、その情報を保持するためのアクションフォームBean(利用者が作成)にセットします。 リクエストとアクションフォームBeanの対応は、モジュール設定ファイル(structs-config.xml)に記述されています。すなわち、HTTPリクエスト内の入力フォームの情報を、Structsが自動的にBeanにセットします。 次に、HTTPリクエストのURLに対応したアクション(ビジネスロジックを呼び出すためのクラスで、利用者が作成する)を呼び出します。呼び出されたアクションでは、ビジネスロジックを実行します。次に、ビジネスロジックの結果などを表示するための情報をJavaBeansやActionFormBeanクラスにセットし、JSPからアクセス可能なコンテキスト保持させます。続いて、次にHTTPリクエストの処理を行うリソース(JSPページやアクションなど)の情報をActionForwardクラス(Strutsが提供)としてリクエストプロセッサに返却します。その後、アクションから返却されたActionForwardクラスが示すリソース(JSPページなど)を呼び出します。呼び出されたJSP内では、表示のために必要な情報をStrutsが提供するカスタムタグライブラリなどでコンテキストから取り出し、ページを作成します。 最後に、JSPによって作成されたページをHTTPレスポンスとして返却します。… Read More


Zopeジャンキー日記 :ラジオボタンにはlabelタグのforが便利: Web  方法  はてなブックマークの「注目エントリー」で、3ユーザと5ユーザの切替ボタンが、 ラベルと連動していないことに気づいた。 HTMLソースでいうと、いま <input value=”3″ name=”threshold” type=”radio”> 3users <input value=”5″ name=”threshold” type=”radio”> 5users のようになっていますが(ちょっと簡略化しています)、 <input value=”3″ name=”threshold” type=”radio” id=”button1″ /> <label for=”button1″>3users</label> <input value=”5″ name=”threshold” type=”radio” id=”button2″ /> <label for=”button2″>5users</label> のようにすれば、ラベル部分もクリックできるようになります。 私はこの切替ボタンをよく押すので、 ラベルもクリックできるようになるとうれしいです>はてなの担当者様 じつは私も、わりと最近になって知ったクチなんですが(笑)、 これは知らないともったいないと思ったので、紹介しておきます。 アップデート (12/22): コメント欄にて、ながさわさんより <label><input value=”3″ name=”threshold” type=”radio” /> 3users</label> <label><input value=”5″ name=”threshold” type=”radio” /> 5users</label> と書けることを教えていただきました。… Read More


Javaの基礎勉強!hellohiro JavaでHello World サーブレット (セッション管理)編: HttpServletRequestインターフェースのgetSessionメソッドで、引数にtrueを指定することで現在のセッションが存在しない場合に新しいセッションが生成されます。 (メソッドの定義) public HttpSession getSession(boolean create) HttpServletRequestインターフェースのgetSessionメソッドで、引数にfalseを指定することで新しいセッションを作成しなくなります。もし、セッションが存在しない場合にはnullが返ってきます。 HttpSessionインターフェースのgetAttributeメソッドでセッションに設定されている情報を取得できます。 (メソッドの定義) public java.lang.Object getAttribute(java.lang.String name)… Read More


大公司的JAVA面试题目 – 中国IT考试网 – 计算机专业考试辅导交流公益网站 – 信息资讯 – 国际认证考试 – SUN认证: 第一,谈谈final, finally, finalize的区别。   final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是 Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。    第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 可以继承其他类或完成其他接口,在swing编程中常用此方式。   第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。   第四, &和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).   第五,HashMap和Hashtable的区 别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值 (key),由于非线程安全,效率上可能高于Hashtable.   第六,Collection 和 Collections的区别。   Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。   第七,什么时候 用assert。 1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。使用方法 assert &lt;boolean表达式&gt;,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。另 外的使用方式assert &lt; boolean表达式&gt;:&lt;other表达式&gt;,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值 用于AssertionError的构建参数。注意编译时要增加-source 1.4… Read More