開発メモ

開発用のメモです。

Java

シャッフル

ソース package jp.mirageworld.algorithm.shuffle; import java.util.ArrayList; import java.util.List; public class RandomShuffle { public static <T extends Comparable<T>> List<T> shuffle(List<T> list) { List<T> retList = new ArrayList<T>(list); for (int i = 0; i < list.size();</t></t></t></t></t>…

最短経路検索

多分もっと短くなる import java.util.*; import java.io.*; public class Main { protected static String[][] matrix; protected static int min = 9999; public static void main (String[] args) throws Exception { // Java sun-jdk-1.7. try ( InputSt…

HTML5 の 値チェックを無効化するボタン

html5 <input type="submit" formnovalidate="formnovalidate" value="戻る"/> struts2 <s:submit formnovalidate="formnovalidate" value="戻る"/></s:submit>

入力必須の項目

html5 <input required="true"/> struts2 <s:textfield required="true"/></s:textfield>

インターセプターの処理を後処理・前処理をわかりやすく

package jp.mirageworld.abstractClass; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.Ac…

ロケーションを動的に処理するための設定

package jp.mirageworld.webapps.report.actions; import java.util.Map; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import or…

カレンダーのレイアウト

<s:set var="tm" value="4" /> <s:set var="c" value="%{ new java.util.GregorianCalendar(2014,#tm,1) }" /> <s:form> <tr style="border: 1px solid black;"> <th><em>M</em></th> <th><em>T</em></th> <th><em>W</em></th> <th><em>T</em></th> <th><em>F</em></th> <th><em style="color: blue">S</em></th> <th></th></tr></s:form></s:set></s:set>

ToString 実行時に null 値を除外する。

import java.lang.reflect.Field; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; p…

HashCode を自動計算する。

commons での実装 import org.apache.commons.lang3.builder.HashCodeBuilder; public class Test { @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this, false); } } 標準ライブラリでの実装 import java.util.Objects; pu…

equals を自動化する。

commons での実装 import org.apache.commons.lang3.builder.EqualsBuilder; public class Test { @Override public boolean equals(RoleDto obj) { return EqualsBuilder.reflectionEquals(this, obj, false); } }

特定のパラメーター・アトリビュート・ヘッダーを除外する HttpServletRequest

パラメーター 対象 hrdIgnoreNames header prmIgnoreNames parameter atrIgnoreNames attribute import java.util.Enumeration; import java.util.Map; import java.util.Vector; import javax.servlet.http.HttpServletRequestWrapper; import javax.servle…

特定の アトリビュートを無視する HttpSession

import java.util.Enumeration; import java.util.Vector; import org.apache.catalina.session.StandardSession; import org.apache.commons.lang3.StringUtils; public class HttpSessionCatalinaWrapper extends StandardSession { private String[] igno…

struts2-junit-plugin / mayaa

java.lang.IllegalStateException: instance is null org.seasar.mayaa.FactoryFactory.check(FactoryFactory.java:62) org.seasar.mayaa.FactoryFactory.getFactory(FactoryFactory.java:98) org.seasar.mayaa.impl.cycle.CycleUtil.getFactory(CycleUtil.j…

struts2-junit-plugin / seasar2 を利用した場合

import static org.junit.Assert.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.StrutsJUnit4TestCase; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.R…

struts2-convention-plugin

pom.xml <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>${struts2.version}</version> <scope>test</scope> </dependency> strtus.xml <constant name="struts.convention.result.path" value="/" /> </constant>

struts2-junit-plugin / NoClassDefFoundError

いかのようなエラーが起きる場合がある。 2014-05-07 10:31:57.697 [ ERROR ] com.opensymphony.xwork2.util.finder.ClassFinder - Error loading class [action.admin.IndexActionTest] java.lang.NoClassDefFoundError: org/apache/struts2/StrutsTestCase…

struts2-jquery-plugin

http://code.google.com/p/struts2-jquery/ pom.xml <dependency> <groupId>com.jgeppert.struts2.jquery</groupId> <artifactId>struts2-jquery-plugin</artifactId> <version>${struts2.jq.version}</version> </dependency>

struts2-junit-plugin の使い方

pom.xml <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-junit-plugin</artifactId> <version>${struts2.version}</version> <scope>test</scope> </dependency> test case import static org.junit.Assert.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logg…

struts-oval-plugin / 未入力の場合はチェックしない

@Email(message = "email.invalid", when = "js:_value != null && _value != ''") public String email;

action に / を含める

<constant name="struts.enable.SlashesInActionNames" value="true" /> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> struts.enable.SlashesInActionNames=true struts.mapper.alwaysSelectFullNamespace=false のいずれか</constant></constant>

method:hoge を有効にする

<constant name="struts.enable.DynamicMethodInvocation" value="true" /> struts.enable.DynamicMethodInvocation=true のいずれか</constant>

action:hoge を有効にする

<constant name="struts.mapper.action.prefix.enabled" value="true" /> struts.mapper.action.prefix.enabled=true のいずれか</constant>

リクエストから特定のパラメーターを除外する。(一覧取得時)

import java.io.IOException; import java.util.Enumeration; import java.util.Map; import java.util.Vector; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapp…

struts2-oval-plugin

pom xml <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-oval-plugin</artifactId> <version>${struts2.version}</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>ne…</groupid></dependency></dependencies></dependencymanagement>

CVE-2014-0094

<interceptor-ref name="params"> <param name="excludeParams">(!i).*class.*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param> <param name="paramNameMaxLength">20</param> </interceptor-ref> name 設定 備考 excludePar…

Mayaa と Strtus2 連携時にvalue以外をテンプレートの値にする

resources/META-INF/org.seasar.mayaa.provider.ServiceProvider <provider> <templateAttributeReader> …</templateattributereader></provider>

Struts2 x Mayaa 時の mayaa テンプレート

<m:mayaa xmlns:m="http://mayaa.seasar.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mayaa.seasar.org http://mayaa.seasar.org/schema/mayaa_core_1_0_0.xsd" xmlns:s="/struts-tags"> </m:mayaa>

実行したアクション情報を取得する Interceptor

import java.util.Map.Entry; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.mapper.ActionMapping; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony…

アプリケーション領域を確認する Interceptor

import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensympho…

セッション情報を確認する Interceptor

import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensympho…

Twitter: @asahina_alice