Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

programming

Tomcat 6.0でJSFのManagedBeanのBigDecimalがデフォルト0になる仕様

リクエストパラメータに含まれていない時でも、BigDecimalがnullではなく0になってしまう。0にならないようにするには、「-Dorg.apache.el.parser.COERCE_TO_ZERO=false」でTomcatを起動する。バグではなくTomcatの仕様のようだ。http://tomcat.apache.org/t…

Javascriptでbit.lyを使った短縮URLを取得する

bit.lyでサインアップし、APIキーを取得しておく。jQueryプラグイン「jq-shorten」を使用する。 jQueryとこのshoten.jsを使用する。 以下のようなスクリプトを記述する。 $("a").shorten({login: 'xxx', apikey: 'R_xxxxxxxxxxxxxxxxxxxxxxxx'}); これで短縮…

Twitterへのtweetボタンを実装する

「http://twitter.com/home?status=xxx」のxxx部分がtweetのテキストボックスにセットされるので、画像リンクなどのURLに設定しておくだけ。xxxはURLエンコーディングする必要がある。 <a id="tweet" href="http://twitter.com/home?status=" + encodeURI('テスト http://example.com')" target="_blank"></a>

スクリプトでユーザーのブックマークを登録する(IE、Firefoxのみ)

IEはwindow.external.AddFavorite()、Firefoxはwindow.sidebar.addPanel()を呼び出す。 function addBookmark(title,url) { if (window.sidebar) { window.sidebar.addPanel(title, url, ""); } else if(document.all) { window.external.AddFavorite(url, t…

画像のタイトルをかぶせる

<div id="test"> <img src="test.jpeg"> <span>説明</span> </div> #test span { background-color:#111111; border-left:1px solid #999999; border-top:1px solid #999999; bottom:0; color:#FFFFFF; font-size:120%; font-style:normal; left:0; margin-bottom:1px; opacity:0.7; padding:5px; position:absolute;…

SubversionからチェックアウトしてSCPでWARファイルをデプロイする

#!/bin/sh mkdir ~/xxx svn checkout --username xxxxx --password xxx http://subversion/svn/something/trunk/xxx ~/xxx cd ~/xxx mvn clean package scp ~/xxx/target/xxx.war xxxxx@xxx.xxx.xxx.xxx:/usr/share/tomcat6/webapps/

Google AnalyticsのデータをJavaで取得する

// Service Object to work with the Google Analytics Data Export API. AnalyticsService analyticsService = new AnalyticsService("gaExportAPI_acctSample_v2.0"); // ClientLogin Authorization. analyticsService.setUserCredentials(userName, passw…

iPad/iPhoneのSafariにおけるiFrameの扱い

どうやら、iPadのmobile Safariでは、iFrameを2本指スクロールさせることができないらしい。もちろん、Appleだからスクロールバーも出せない。

IEのみにCSSを適用するCSSハック(ただのバッドノウハウ)

body { /* applied only IE6 */ _line-height:130%; /* applied IE6 and IE7 */ >line-height:130%; /* applied only IE8 */ line-height /*\**/: 130%\9; } 有名なスターハックのほか、「>」でのハック、IE8では「/*\**/」と「\9」を使う。「\9」がないとWe…

iPadなどのmobile safariでは、labelタグのfor属性で指定したチェックボックスにチェックできない

ので、labelにclickイベントをバインドする。こちらのblogで、きれいに作って公開してくれてます。 $(‘label’).each(function(i, l){ l = $(l); l.bind(‘click’, function(){ var t = $(‘input[id=' + l.attr('for') + ']‘); t.checked = t.checked ? false …

QuartzはWARに含んだJARファイルとコンテナのlibディレクトリにあるJARファイルのバージョン違いでClassNotFoundExceptionが発生

java.lang.ClassNotFoundException: org.quartz.JobDetailQuartzでスケジューリングしようとしたんだけど、上記例外が発生した。もちろん、libディレクトリにQuartzのJARはあるから、ライブラリのバージョンを上げてみたりしたんだけど、例外が発生したまま…

FancyBox 1.3.1でiframeを使うと、Firefoxだけ2回同一リクエストが送られる

ふと見つけてしまった。既知のバグのようで、「fancybox request twice」でググると見事にヒット。 fancybox makes multiple request on iframe is used ? - fancybox | Google Groups 現行バージョンの1.3.1で発生しているので、次のバージョンがリリースさ…

Apacheのmod_rewriteでトップページへのアクセスをリダイレクトする

httpd.confに記述する。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/$ /xxx.html RewriteRule ^/zzz.html$ /index.html </IfModule>

Pleskで管理しているサーバーのhttpd.confを書き換える

普通にhttpd.confを書き換えても有効にならない。/etc/httpd/conf.d/zzxxx_xxx_httpd.confみたいなファイルに次のような記述がある。 Include /var/www/vhosts/xxx/conf/httpd.includeなので、このファイルを書き換える。

HTMLでチェックボックスやラジオボタンのラベル

<input type="checkbox" id="test"/><label for="test">TEST</label> label要素のfor属性にチェックボックスのIDを指定する。

jQueryでチェックボックスにイベントを登録する

$("input:checkbox").change(function() { var isChecked = $(this).attr("checked"); }); 「input:checkbox」がすべてのチェックボックスを取得するセレクタ。

MySQLでは256バイト以上のVARCHARはTEXTになる

タイトルまま。

MySQLで大きなBLOBを扱うときはmax_allowed_packetを設定する

my.cnf [mysqld] max_allowed_packet=16MMySQLを再起動する。 mysql> show variables like 'max_allowed_packet'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 16777216 | +---…

Servlet(Spring MVC) + JSP + jQueryでTwitterライクなmoreボタンを実装する

ひとまず初期表示する。DAOでは10件など固定の件数を取得する。このサンプルでは、IDの順番に表示していく。 @RequestMapping(method = { RequestMethod.GET }) public ModelAndView index(@RequestParam(defaultValue = "0") Long Id) { // limit 10などのS…

JavaScript(jQuery)で指定した要素だけを印刷する

Ask Ben: Print Part Of A Web Page With jQueryを参考にしました。上記サイトで公開されてるコード。 //Create a jquery plugin that prints the given element. jQuery.fn.print = function(){ // NOTE: We are trimming the jQuery collection down to th…

JavaScript(jQuery)でオーバーレイした画面を表示する

画面にレイヤーをかぶせて子画面を表示するような、よくある作りを実装する。jQueryを使うけど、プラグインとしてFancyBoxを使うと楽にできた。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://www.google.com/jsapi"></script> <script> google.load("jquery", "1.4.2"); </script> </meta></head></html>

iBatisのSQLをログ出力する

log4j.xmlをつぎのようにする。 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> </layout></appender></log4j:configuration>

iBatisでの動的SQL

こんな感じ。 <select id="selectWithoutBLOBs" resultMap="ibatorgenerated_BaseResultMap" parameterClass="xxx.Xxx" > select id, xxx, xxx from xxx <dynamic prepend="where"> <isNotNull prepend="and" property="xxx"> xxx = #xxx:INTEGER# </isNotNull> <isNotNull prepend="and" property="xxx"> xxx = #xxx:INTEGER# </isnotnull></dynamic></select>

JSTLでの通貨フォーマット

<fmt:formatNumber type="CURRENCY" value="${xxx.xxx}" />currency="JPY"とすると「JPY 4,000」とか出てしまうので注意。</fmt:formatnumber>

Javaでサムネイル画像のような縮小画像を作る

意外にもメジャーなライブラリはないっぽい。JDKのImageIOを使う。 import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; impo…

linuxのTomcatにJVM引数を渡す

$ sudo vi /etc/sysconfig/tomcat6 or $ sudo vi /etc/tomcat6/tomcat6.conf で CATALINA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"を設定する。どちらの設定ファイルが優先されるかはディストリビューション依存?らしい。 僕は/e…

Mavenで${basedir}/src/main/webappディレクトリにあるファイルをWARから除外する

パスがわからなくてはまった。 <project> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceExcludes>*.hoge</warSourceExcludes> </configuration> </plugin> </plugins> </build> </project> カレントが${basedir}/src/main/webappらしい。

MavenでWebアプリケーションを作成するときのアーキタイプ

よく使うだろうからこれだけピックアップ。 mvn archetype:create -DgroupId=xxx.xxxxx -DartifactId=xxxxx -DarchetypeArtifactId=maven-archetype-webapp

MavenでWARにパッケージするときに特定のファイルを除外する

pom.xmlに次のように記述する。 <project> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceExcludes>**/*.xml</warSourceExcludes> </configuration> </plugin> </plugins> </build> </project>これだとXMLファイルを除外する。

Jackson JSONで出力日付フォーマットを指定する

Ismail Seyfi's Blog: How to control Date formatting when Jackson JSON Processor is used with Spring 3.0 import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.codehaus.…