如何检索Struts 2中select标签的值

问题描述 投票:0回答:2

我正在使用 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" />
java jsp jdbc struts2 struts-tags
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" />

0
投票

代替值(我认为它是

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

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" />

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

© www.soinside.com 2019 - 2024. All rights reserved.