Struts2 - 将数据从具有相同名称的jsp表单字段传递给action类

时间:2015-06-07 16:37:19

标签: jsp struts2 struts-action

在我的struts表单中,我有几个具有相同名称的字段(文本字段)。 它们都携带相同的信息(通过js更改事件)。 但是,在操作类中,它们将以逗号分隔值而非值一次导入。

以下是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 -->

上述文本字段出现多次,并根据词性显示或隐藏。所有文本字段都具有相同的键(或名称),因为它们都指向对象“项目”中的相同字段。使用JS函数,它们内部都具有相同的值。

我的问题是:
当来自jsp的字符串传递给action类时,'item'的'subitem'中生成的'root'字段将所有值以逗号分隔。 也就是说,假设我输入'xxx'作为根,item.getSubitem()。getRoot()将导致:'xxx,xxx,xxx,xxx,xxx,xxx'。
如果我跳过统一所有值的JS函数,它将导致:',, xxx ,,,'。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用具有相同名称的字段需要考虑一些因素:

如果所有字段都具有相同的值,则表示您只需要将其中一个字段发送到服务器,您可以考虑重命名其他字段,也可以将其他字段禁用。禁用隐藏的输入或输入将阻止浏览器发送它。

如果您需要在服务器上拥有所有字段(输入)的值,则需要简单地定义索引属性,如下所示:

    private String[] root;

    public String[] getRoot() {
        return root;
    }

    public void setRoot(String[] root) {
        this.root = root;
    }

答案 1 :(得分:1)

  1. 从文本字段中删除所有键,并使用键&#34; item.subitem.root&#34;添加隐藏字段。
  2. 通过js事件将所选文本字段的值放入隐藏字段。所以,只有输入才会传递给行动。