Struts 2 では、パラメーターはParameters Interceptorによって処理されます。
ソースコードを見てみると、
public static final String ACCEPTED_PARAM_NAMES = "\\w+((\\.\\w+)|(\\[\\d+\\])|(\\(\\d+\\))|(\\['\\w+'\\])|(\\('\\w+'\\)))*";
つまり、次の正規表現を使用して入力を検証します。
\w+(
(\.\w+) |
(\[\d+\]) |
(\(\d+\)) |
(\['\w+'\]) |
(\('\w+'\))
)*
Java では、
\w
「単語文字」の略です。常に ASCII 文字と一致します[A-Za-z0-9_]
、ASCII文字、数字、およびアンダースコアのみを受け入れます。
ハッシュの途中にあるマイナス記号
sequence['df18df5e-31ca-457e-89c1-14c0ab84e25c']
正規表現を壊しているため、パラメーターが受け入れられません。
解決策は次のとおりです: を展開して最後に\w
a を追加することにより、括弧内のマイナス記号を受け入れる正規表現を作成します。-
\w+(
(\.\w+) |
(\[\d+\]) |
(\(\d+\)) |
(\['[A-Za-z0-9_\-]+'\]) |
(\('[A-Za-z0-9_\-]+'\))
)*
Javaでは
"\w+((\.\w+)|(\[\d+\])|(\(\d+\))|(\['[A-Za-z0-9_\\-]+'\])|(\('[A-Za-z0-9_\\-]+'\)))*"
あとは、Interceptor にパラメーターとして渡すことで、カスタム正規表現でデフォルトの正規表現をオーバーライドするだけです (例は規約プラグインを使用していますが、struts.xml を使用する場合も同じです)。
@Action( value = "yourAction",
results = @Result( location = "/yourPage.jsp" ),
interceptorRefs = @InterceptorRef (
value = "defaultStack",
params = { "params.acceptParamNames",
"\w+((\.\w+)|(\[\d+\])|(\(\d+\))|(\['[A-Za-z0-9_\\-]+'\])|(\('[A-Za-z0-9_\\-]+'\)))*"
}
)
)