サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
nikkei225f.hatenadiary.org
以前JSPの部品化を検討したときに s:includeによる部品化は仮引数が使えないなどいまいち使い勝手が良くないと結論付けたが最近とても良い方法を思いついた。 それは s:pushと組み合わせて仮引数的な扱いの変数をs:includeに渡す方法である。 たとえば次のように何か固定的なフォーマットでの出力を行うテンプレートの buhin.jsp を用意したとして、message や value が変数とする。 <%@page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <s:property value="message"/><br> <s:property value="value"/> 呼び出し側では : <s:push value="#{ 'message'
Struts2のs:checkboxlistに配列を渡せば、複数選択可能なcheckboxが簡単に出力できる。 しかし、全てが1行に出てしまうので要素数が多い場合に具合が良くない。 次のように記述すると簡単に一行の出力要素数を調整できる。 元のJSPはこんな感じで出力していたとすると、これだと100要素があると1行に100個出てしまい、1つの要素の文字列の途中で折り返してしまったりと見栄えがいまいち良くない。 <s:checkboxlist list="config.getList('area')" listKey="value" name="area" listValue="label" theme="simple"/> 次のようにiteratorで囲むように変更すると、この場合は 3個毎に折り返して出力されるようになる。 <s:iterator value="config.getLis
Struts2のカスタムタグには s:checkbox と類似の s:checkboxlist というのがある こちらは s:select と同じような使い方になる。 listのソースを固定値ではなく、プログラムから設定する方法で紹介する tutorial.Media.java public class Media { String type; String code; public Media( String type, String code ) { this.type = type; this.code = code; } public String getType() { return type; } public String getCode() { return code; } public void setType( String type ) { this.type = t
Struts2での繰り返し処理のタグの s:iterator で属性status を指定すると、繰り返しの状態を取得できる。 次のようにすると rs という変数が status になる <s:iterator value="listElements" status="rs"> statusは次のようなプロパティを参照できる 補足 例 index 何行目か 0からの数値 #rs.index count 何行目か 1からの数値 #rs.count first 最初か true/false #rs.first last 最後か true/false #rs.last even 偶数か true/false #rs.even odd 奇数か true/false #rs.odd modulus 剰余 0から指定数-1までの数値(最初は1) #rs.modulus(5)
HelloWorldのテストを redifineMethods を利用して行ったが、JMockitのExpectations を使ってEasyMockと同じように記録/再生させる方式でもテストできる。 これを使うと Struts2 のアクションとかのテストも比較的簡単に出来そうな気がする。 package tutorial; import org.junit.After; import org.junit.Test; import mockit.*; public class HelloWorldTest3 { @Test public void testHello() { new Expectations(true) { DummyStream mock; { mock.println("Hello World"); } }; HelloWorld.main(null); } @Afte
Springの applicationContext.xml の最初の部分を2.5用に次のように変更 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springf
色々便利なInterceptorが標準装備のStruts2だが、WEBで一般的な問題の2重ポストについて、トランザクションTokenによる防止機構が用意されている。 Tokenの仕組みは簡単に言うと、FORMにHIDDENで仕込んだTokenとセッションの保持している値との比較を行い、一度だけActionの実行を許すものである。 2重POSTを禁止したいFORMで次のようにTokenを仕込む <s:form action="user_add"> <s:token/> : </s:form> そして、user_addのアクション側で次のようにTokenInterceptorを参照する struts.xml <action name="user_add" class="UserAction" method="doAdd"> <interceptor-ref name="token"> <par
使い方と言っても、TokenInterceptorと殆ど変わらない。 で、何が違うのかというと、通常トランザクションTokenでTokenが違う場合エラーメッセージや他の画面を表示する事になるが、これだと誤って2重ポストをした消費者にはエラー画面が表示され、完了画面にお目にかかる事ができない。 そこで、TokenSessionStoreInterceptorの登場となる。こちらはAction結果のValueStackの内容をToken処理後にSessionに記録してくれ、2重ポストのリクエストが来たときにSessionからValueStackを再構築して、あたかも元々のリクエストのように結果画面を表示してくれる。 これで、2重ポストをしてしまった消費者も目出度く完了画面を見ることができ、表示されている問い合わせ番号をメモすることができる。 ちょっとTIPS:ValueStackをSessi
Google Web Toolkit、これはクライアント側でのコードをJAVAで書くことが出来る面白い技術である。これを今のフルスタックフレームワークに取り込みたいと強く感じた。これが取り込めればクライアントサイドをクロスブラウザの泥臭い面倒無しに好きなだけリッチに出来る。 GWTの解説はこのあたりを見てもらい http://code.google.com/intl/ja/webtoolkit/overview.html (本家) JavaをJavaScriptに変換するグーグルのツールを使ってみよう − @IT 第1回 JavaScriptレスでAjax開発! | 日経 xTECH(クロステック) まずはGoogle Web Toolkit(GWT)を使うための準備。 GWTは次の場所から落として、適当なディレクトリに展開しておく。 GWT Project そして、Eclipseから簡単
OGNLのなんでもできる便利さは実装の甘さにより脅威に対して無防備となる可能性がありましたね。 https://www.sec-consult.com/files/20120104-0_Apache_Struts2_Multiple_Critical_Vulnerabilities.txt 2.3.1 など相当枯れたと思われたバージョンでも外部からなんでもできてしまうセキュリティホールが多数(笑)発見されるなど恐ろしすぎてとても業務で使えるものではないかもしれません。 Struts2の設定で default-interceptor-ref を指定するといちいち個別の Action に interceptor-ref を書かないで済むので package で default-interceptor-ref を指定して package 内の Action ではすべて共通のinterceptor
TLDファイルが struts2-core-2.0.11,jar に入っていて eclipse から認識できない?のでJSPエディタでタグの補完機能が使えなかったり、エラーマークが表示されたりして気持ちよくない。 struts2-core-2.0.11.jar の中に META-INF/struts-tags.tld というファイルがあるので、そのファイルを取り出して WEB-INF直下に置く そして web.xml に次のように書くと、Eclipseに怒られないようになる。 <taglib> <taglib-uri>/struts-tags</taglib-uri> <taglib-location>/WEB-INF/struts-tags.tld</taglib-location> </taglib>
あまり同じようにしている設定を知らない。何故だろう?無駄な記述が不要でイケてると思うんだが。 tiles.xml にはレイアウトdefinitionだけを書く <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://struts.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <definition name="default.layout" template="/WEB-INF/tiles/layout.jsp"> <put-attribute name="title" value=
struts.xmlのpackageでnamespaceを指定しないと "" となり、これは fallback とみなされる。 つまり namespace が完全に一致するパッケージにアクションが見つからないときに fallback から探される。 <package name="MyDefault1" extends="struts-default"> <action name="foo"> : </action> </package> <package namespace="/hoge" name="MyDefault2" extends="struts-default"> <action name="bar"> : </action> </package> <package namespace="/" name="MyDefault3" extends="struts-default"
global-exception-mappings で例外の種類と例外が発生したときに返却する result値を設定し、 global-results で result値に対する処理を記述すればいい。 もちろん global では無く個別のアクションで設定することも出来る。 例外捕捉の順番は具体的なもの程先に指定するのはセオリー。 認可エラーの場合は /notallow.jsp、例外発生の場合は /exception.jsp に dispatch する場合は次のようにする <global-results> <result name="AccessDenied">/notallow.jsp</result> <result name="Exception">/exception.jsp</result> </global-results> <global-exception-mappings
staticParamsインターセプターを使用すると、struts.xmlからアクションにパラメータを渡すことが出来る 次のようにアクションに staticParamsを指定し、param を指定すると <action name="user_edit" class="UserAction"> <interceptor-ref name="staticParams"/> <param name="preread">true</param> </action> アクションの setPrereadメソッドが "true"引数で呼び出される public class UserAction { boolean preread; : public void setPreread( String on ) { preread = "true".equals(on); } : } アクションの挙動を制御し
このページを最初にブックマークしてみませんか?
『Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフ...』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く