我正在使用struts 2,我已经设置了这样的代码:
动作类:
public class OrderDetailAction extends BaseActionSupport {
private Collection<ShippingAddress> shippingAddressList;
<the getters and setters here>
private Collection<ShippingAddress> billingAddressList;
<the getters and setters here>
public String displayCreate() {
LOGGER.info("DISPLAY CREATE CALLED");
populateForiegnFields();
LOGGER.info("populate foreign fields done calling");
return SUCCESS;
}
private void populateForiegnFields(){
LOGGER.info("ENTERED POPULATE FOREIGN FIELDS");
ShippingAddressService shippingAddressService = ServiceFactory.getInstance().getShippingAddressService();
shippingAddressList = shippingAddressService.getShippingAddresss();
if(shippingAddressList == null) {
LOGGER.info("shipping address list IS NULL");
} else {
LOGGER.info("shipping address list IS NOT NULL. CONTENTS:");
}
getSession().put("shippingAddressList", shippingAddressList);
billingAddressList = shippingAddressService.getShippingAddresss();
if(billingAddressList == null) {
LOGGER.info("billingAddressList IS NULL");
} else {
LOGGER.info("billingAddressList IS NOT NULL. CONTENTS:");
}
getSession().put("billingAddressList", billingAddressList);
}
我的创建订单明细JSP的片段是:
<s:form>
<div class="form-group">some other fields</div>
<div class="form-group">
<s:select label="SHIPPINGADDRESSID" list="shippingAddressList" listKey="ID" listValue="ID" name="shippingAddress" ></s:select>
</div>
<div class="form-group">
<s:select label="BILLINGADDRESSID" list="billingAddressList" listKey="ID" listValue="ID" name="billingAddress" ></s:select>
</div>
<input class="btn btn-success" type="submit" name="action:createOrderDetail" value="submit" id="displayCreateOrderDetail_createOrderDetail"/>
<input class="btn btn-default" type="submit" name="action:getOrderDetails" value="cancel" id="displayOrderDetail_getOrderDetails" />
</s:form>
我得到的错误是:
标记'select',字段'list',名称'shippingAddress':请求的列表 密钥'shippingAddressList'无法解析为 collection / array / map / enumeration / iterator type
但令我困惑的是,特别是在我在其他帖子上查找此错误之后 人们建议可以永远不会实例化shippingAddressList,但是当我检查上面写的日志文件时,它不是null,并且在某一时刻,我还记录了来自shippingAddressList的值。
还有其他原因我可能会收到此错误吗?
提前谢谢你。
答案 0 :(得分:0)
首先删除集合,改为使用List。
private List<ShippingAddress> shippingAddressList;
<the getters and setters here>
private List<ShippingAddress> billingAddressList;
<the getters and setters here>
我不确定你为什么把这两个列表放在会话上。他们已经处于价值叠加状态。
我相信您的ShippingAddress
班级有ID
属性。
答案 1 :(得分:0)
哦,小男孩,所以这里是我犯的错误。为了确保人们不会遇到这种麻烦:
我的shippingAddressList和我的billingAddressList的getter和setter如下:
get**s**hippingAddressList(); set**s**hippingAddressList()
和
get**b**illingAddressList(); set**b**illingAddressList()
这里的问题是外壳不合适。因为它不是合适的骆驼案例,所以struts永远无法调用getter和setter。