gpt4 book ai didi

java - 无法使用输入填充 HashMap

转载 作者:行者123 更新时间:2023-12-01 13:27:41 27 4
gpt4 key购买 nike

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

<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

最佳答案

在 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 stands for "word character". It always matches the ASCII characters [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_\\-]+'\)))*"
}
)
)

关于java - 无法使用输入填充 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21727045/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com