2014-02-12 4 views
0

У меня есть несколько входов, как это в цикле:Не удается заполнить HashMap с входами

<s:hidden name="sequence['%{#currentEvent.idChain}']" value="%{#currentEvent.sequenceSpace}"/> 

И в моем файле Java, у меня есть

private HashMap<String, String> sequence; 
public HashMap<String, String> getSequence() { 
    return sequence; 
} 
public void setSequence(HashMap<String, String> sequence) { 
    this.sequence = sequence; 
} 

Но для каждого входа генерируется в моем JSP, моя консоль показывает, что:

Parameter [sequence['df18df5e-31ca-457e-89c1-14c0ab84e25c']] didn't match acceptedPattern pattern! 

поэтому мой HashMap является нулевой

+0

** не соответствует принятому шаблону Паттерна! ** Что не соответствует? Любые журналы ошибок? –

+0

Это единственное сообщение, которое у меня есть в журналах. – Florent06

ответ

1

В 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_\\-]+'\)))*" 
            } 
          ) 
     ) 
+0

Это работало @ Florent06? –

Смежные вопросы