具有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。
答案 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 );
}
}