1

我正在使用 Struts<s:select>标记从我的数据库中检索值,以 JSP 页面上的形式显示我使用以下代码将值存储在列表对象中

ps = con.prepareStatement("select emp_ty_name, em_ty_id  from emptype");
set = ps.executeQuery();
while (set.next()) {
    typeID.add(set.getInt("em_ty_id"));             
    typeName.add(set.getString("emp_ty_name"));
}

并且在 JSP 页面中,我正确显示了名称,但代替了显示 0(零)值的值

<s:select label="Employee Type" list="typeName" name="empType_em_ty_id" />
4

2 回答 2

1

您需要使用具有两个属性的对象列表,而不是两个单独的列表。

然后创建一个对象

public class EmpType { 
    private Integer typeID;
    private String  typeName;
    // getters and setters 
}

在您的操作中声明它的列表,然后填充它:

private List<EmpType> empTypes = new ArrayList<EmpType>();
// getters and setters 

public String execute(){
    // stuff...

    while (set.next()) {
        EmpType et = new EmpType();
        et.setTypeID(set.getInt("em_ty_id"));
        et.setTypeName(set.getString("emp_ty_name"));
        empTypes.add(et);
    }

    // stuff 

    return SUCCESS;
}

listKey迭代您的对象并使用和listValue属性指定键和值:

<s:select label = "Employee Type" 
           list = "empTypes" 
        listKey = "typeID"
      listValue = "typeName"
           name = "empType_em_ty_id" />
于 2014-04-29T08:27:07.933 回答
0

代替值(我认为它是select标签的字段值,即您没有澄清的问题),您有一个原始类型的属性值,int或者long未初始化的属性值,因此包含0值。在 Struts 中,您按名称映射 JSP 字段,如果您没有指定value属性来预选默认值,则该值将按name属性检索。属性的值name是一个 OGNL 表达式empType_em_ty_id,它在值堆栈中求值,并返回一个属性值。这个值不是显示给你的,而是当你设置change的值并在你表单option时检索到的。submit通常为selecttag 需要两个操作属性:一个用于值,另一个用于选项列表。例如

private Integer empType_em_ty_id;
private Map<Integer,String> typeMap = new HashMap<>();
//getters and setters

@Override
public String execute() throws Exception {
  ...
  PreparedStatement ps = con.prepareStatement("select emp_ty_name, em_ty_id  from emptype");
  ResultSet rs = ps.executeQuery();
  while (rs.next()) {
    typeMap.put(
     rs.getInt("em_ty_id"), 
     rs.getString("emp_ty_name")
    );
  }
  //initializing value 
  empType_em_ty_id = typeMap.keySet().iterator().next();
  return SUCCESS;
}

JSP

<s:select label="Employee Type" list="typeMap" name="empType_em_ty_id" />

关于选定值:用于保存从另一个对象列表中选择的值的对象属性。所选对象的键应该是所选值的对象的外键。在我的示例中,我只是从同一个集合中获取了一个值,而不是从另一个对象中获取值,仅用于演示目的。

于 2014-04-29T16:18:07.460 回答