Struts2 - 将来自 jsp 同名表单字段的数据传递给操作 class
Struts2 - passing data from jsp form fields with same name to action class
在我的 struts 表单中,我有几个同名的字段(文本字段)。
它们都带有相同的信息(通过 js 更改事件)。
但是,在操作 class 中,它们被导入为逗号分隔值而不是一次值。
这是来自 item.jsp 的片段:
<s:select label="Part of speech" key='item.pos' list=.../>
<div class="verb"><s:textfield key='item.subitem.root'/></div>
<!-- hidden if item.pos!=verb -->
.
.
.
<div class="noun"><s:textfield key='item.subitem.root'/></div>
<!-- hidden if item.pos!=noun -->
以上文本框出现多次,根据词性显示或隐藏。所有文本字段都具有相同的键(或名称),因为它们都指向对象 'item' 中的相同字段。用JS函数,里面的值都是一样的
我的问题是:
当来自 jsp 的字符串传递给操作 class 时,'item' 的 'subitem' 中生成的 'root' 字段的所有值都以逗号分隔。
也就是说,假设我输入 'xxx' 作为根,item.getSubitem().getRoot() 将导致:'xxx,xxx,xxx,xxx,xxx,xxx'.
如果我跳过统一所有值的 JS 函数,它将导致:',xxx,'.
有什么解决办法吗?
使用同名字段需要一些注意事项:
如果所有字段都具有相同的值,意味着您只需要将其中一个发送到服务器,您可以考虑重命名其他字段,或者可以将其他冗余字段禁用禁用.禁用输入或隐藏输入,将阻止浏览器发送它。
如果您需要在您的服务器上获得所有字段(输入)的值,您需要定义一个索引属性,简单如下:
private String[] root;
public String[] getRoot() {
return root;
}
public void setRoot(String[] root) {
this.root = root;
}
- 从文本字段中删除所有键并添加一个包含键 "item.subitem.root" 的隐藏字段。
- 通过js事件将选中文本域的值置为隐藏域。这样,只有输入才会传递给操作。
在我的 struts 表单中,我有几个同名的字段(文本字段)。 它们都带有相同的信息(通过 js 更改事件)。 但是,在操作 class 中,它们被导入为逗号分隔值而不是一次值。
这是来自 item.jsp 的片段:
<s:select label="Part of speech" key='item.pos' list=.../>
<div class="verb"><s:textfield key='item.subitem.root'/></div>
<!-- hidden if item.pos!=verb -->
.
.
.
<div class="noun"><s:textfield key='item.subitem.root'/></div>
<!-- hidden if item.pos!=noun -->
以上文本框出现多次,根据词性显示或隐藏。所有文本字段都具有相同的键(或名称),因为它们都指向对象 'item' 中的相同字段。用JS函数,里面的值都是一样的
我的问题是:
当来自 jsp 的字符串传递给操作 class 时,'item' 的 'subitem' 中生成的 'root' 字段的所有值都以逗号分隔。
也就是说,假设我输入 'xxx' 作为根,item.getSubitem().getRoot() 将导致:'xxx,xxx,xxx,xxx,xxx,xxx'.
如果我跳过统一所有值的 JS 函数,它将导致:',xxx,'.
有什么解决办法吗?
使用同名字段需要一些注意事项:
如果所有字段都具有相同的值,意味着您只需要将其中一个发送到服务器,您可以考虑重命名其他字段,或者可以将其他冗余字段禁用禁用.禁用输入或隐藏输入,将阻止浏览器发送它。
如果您需要在您的服务器上获得所有字段(输入)的值,您需要定义一个索引属性,简单如下:
private String[] root;
public String[] getRoot() {
return root;
}
public void setRoot(String[] root) {
this.root = root;
}
- 从文本字段中删除所有键并添加一个包含键 "item.subitem.root" 的隐藏字段。
- 通过js事件将选中文本域的值置为隐藏域。这样,只有输入才会传递给操作。