如何确定在JSP上填充了哪个输入字段?

时间:2014-03-20 14:19:16

标签: java string jsp input struts2

具有Struts项目和基于Web表单的JSP页面,其中包含多个输入字段。用户将数据输入到只有一个输入字段并提交表单。因此调用相关的Action类。 在该动作类中,我为JSP上的每个输入都有适当的String字段,稍后在我的代码中,我需要使用填充值来查找一些数据。

所以我的问题是: 你如何确定填充了哪个字段?

'因为我知道唯一一种愚蠢的方式(不是真正的代码,只是作为一个例子):

if (isNotBlank(field_1)) {
findData(field_1)
} else if (isNotBlank(field_2)) {
findData(field_2)
} else if (isNotBlank(field_3)) {
findData(field_3)
} else if...

依旧...... 对于一组字符串,是否有任何优雅的方法来确定哪一个不是空白? 任何提示都表示赞赏。 THX。

1 个答案:

答案 0 :(得分:2)

您的问题有两种常用方法。第一种方法,我认为可能是最好的,是重构您的用户界面。不是呈现大量输入字段,而是询问用户她将使用哪个输入字段,然后仅使用该字段提示她。为了做到这一点,我建议一些javascript来操纵表单的提交方式。 struts动作中的伪代码如下所示:

findData( whichInput( firstQuestion ) ) 

从那里,您试图根据用户对第一个问题的回答来决定使用哪个字段。如果您认为第一个问题可能只是导致索引,并且您将第二个问题的输入放在List而不是独立声明的变量中,则可以进一步简化为 -

findData( fields.get( whichInput.intValue() ) )

在这种情况下,您的操作会大大简化,因为"字段" list将有一个getter / setter和" whichInput"属性可以声明为整数。

这使我第二种方法可能更容易合并到您现有的用户界面。与我描述的第一种方法非常相似,从具有field_1,field_2 ... field_n变为具有单个List变量,称为字段。然后,在您的用户界面中,使用

之类的索引
<s:input name="fields[1]" label="Field 1" value="%{fields[1]}" />

然后,您可以从操作代码循环遍历字段,而不是使用大的if / else块:

for (String field : fields) {
    if (isNotBlank( field ) ) {
        findData( field );
    }
}