【问题标题】:Can't populate a HashMap with inputs无法使用输入填充 HashMap
【发布时间】:2014-02-12 11:45:24
【问题描述】:

我在循环中有一些这样的输入:

<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 是 null

【问题讨论】:

  • 不匹配 acceptedPattern 模式! 什么不匹配?有错误日志吗?
  • 这是我在日志中的唯一消息。

标签: java regex parameters struts2 struts2-interceptors


【解决方案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']

正在破坏正则表达式,导致参数不被接受。

解决方案是:通过扩展\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_\\-]+'\)))*"

您现在要做的就是用您的自定义正则表达式覆盖默认正则表达式,方法是将其作为参数传递给拦截器(示例是使用约定插件,但使用 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_\\-]+'\)))*"
                                    }
                           )
       )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 2015-03-23
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多