我正在使用Struts select标签从我的数据库中检索值,在JSP页面上的表单中显示我使用以下代码将值存储在list对象中
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" />
答案 0 :(得分: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" />
答案 1 :(得分:0)
代替值(我认为它是select
标记的字段值,即您没有澄清的问题),您有一个属性的值,它是一个基本类型{{1} }或int
,未初始化,因此包含long
值。在Struts中,您可以按名称映射JSP字段,如果未指定0
属性来预选默认值,则该值将由value
属性检索。 name
属性的值是在值堆栈中计算的OGNL表达式name
,并返回属性值。此值不会向您显示,但会在empType_em_ty_id
change
的值时设置,并在您option
表单时检索。通常,对于submit
标记,需要两个操作属性:一个用于值,另一个用于选项列表。例如
select
JSP
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;
}
关于所选值:它用于保存对象属性,该属性是从其他对象列表中选择的值。所选对象的键应该是选择值的对象的外键。在我的例子中,我刚刚从同一个集合中获取了一个值,但是仅从另一个对象中获取了值,仅用于演示目的。