В Struts 2 параметры обрабатываются Parameters Interceptor.
Глядя в исходном коде, вы увидите
public static final String ACCEPTED_PARAM_NAMES = "\\w+((\\.\\w+)|(\\[\\d+\\])|(\\(\\d+\\))|(\\['\\w+'\\])|(\\('\\w+'\\)))*";
, что означает, что он использует регулярное выражение для проверки ввода:
\w+(
(\.\w+) |
(\[\d+\]) |
(\(\d+\)) |
(\['\w+'\]) |
(\('\w+'\))
)*
In Java,
\w
стенды для «символа слова». Он всегда соответствует символы ASCII [A-Za-z0-9_]
, то он принимает ASCII буквы, номера и подчеркивает, больше ничего.
минус знаки в середине вашего хэша
sequence['df18df5e-31ca-457e-89c1-14c0ab84e25c']
нарушают регулярное выражение, в результате чего параметры не принимаются.
Решение: создать регулярное выражение, которое будет принимать знак минус внутри скобок, по expading в \w
и добавление -
в конце:
\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 as (пример с плагином условного обозначения, но при использовании 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_\\-]+'\)))*"
}
)
)
** не соответствует принятому шаблону Паттерна! ** Что не соответствует? Любые журналы ошибок? –
Это единственное сообщение, которое у меня есть в журналах. – Florent06