1

在我的 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 的字符串传递给操作类时,“项目”的“子项目”中的“根”字段的所有值都以逗号分隔。也就是说,假设我输入 'xxx' 作为根,item.getSubitem().getRoot() 将导致:'xxx,xxx,xxx,xxx,xxx,xxx'。
如果我跳过统一所有值的JS函数,它将导致:',,xxx,,,'。

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

4

2 回答 2

1

使用同名字段需要一些注意事项:

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

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

    private String[] root;

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

    public void setRoot(String[] root) {
        this.root = root;
    }
于 2015-06-08T04:44:39.140 回答
1
  1. 从文本字段中删除所有键并添加键为“item.subitem.root”的隐藏字段。
  2. 通过 js 事件将选中的文本字段的值放到隐藏字段中。这样,只有输入的才会传递给动作。
于 2015-06-08T06:01:28.920 回答