我需要实现一个表,其中每行都有用户希望作为一个整体提交的可编辑信息,但每行上的按钮可以立即删除该行。因为我关心的是整个表单,而表单不能嵌套,所以接收按钮按下的动作可能必须将其作为索引属性处理,所以这就是我构建它的方式。
我目前正在做的是通过一个长索引。
我的JSP呈现以下HTML:
<input type="submit" value="Remove" name="removeButtons[## numbers go here ##]" />
在我的action类中,我公开并使用属性如下:
private Map<Long, String> removeButtons = new HashMap<Long, String>();
public Map<Long, String> getRemoveButtons() {
return removeButtons;
}
// Later when the action is called
for(Long button : removeButtons.keySet()) {
// this only ever returns nothing or the one button that was pressed
}
这对于数值索引非常有效。
我现在需要对另一个表再次执行此操作,但行的索引是String
。将Long
转换为String
,在方括号内放置或不放置引号,将方括号更改为圆括号...似乎什么都不管用。
我已经知道如何使用编号索引来实现它,并且我能够通过向每行添加数字索引值来实现它,但是,我想知道如何使用Map
的String
键来实现它。
或者,有没有更好的方法来实现我想做的事情(在一个表单上任意多个按钮)?
2条答案
按热度按时间8wtpewkr1#
如果你想在索引中使用引号,你需要这个getter。它允许使用
String
键到Map
,并且您应该在索引中使用引号,以让OGNL使用字符串值作为键并评估相应的getter。举个例子
或使用字符串变量或操作的属性
编辑:
谁知道您会对不传递默认接受模式的参数使用非标准键。您的参数名称如
"removeButtons['GN 00501.013']"
。使用
params
拦截器的模式"\\w+((\\['\\w+((\\s\\w+)|(\\.\\w+))*'\\]))*"
到acceptParamNames
参数来克服硬编码模式,就像在this答案中所做的那样。xfb7svmp2#
Roman提供的语法是正确的,但有一个警告,可能是一个bug。
在进一步的调试中,我将getRemoveButtons更改为
我在使用Long时得到了适当的日志消息,但当我转换为Map时,我尝试过的任何语法都无法调用此函数,直到我发现字符串中白色破坏了功能。即“GN00501.013”不起作用,但“GN00501.013”起作用。我会在Struts2邮件列表中询问这是设计的还是其他一些与Struts无关的无法克服的问题。