1.要回显的数据不在栈顶
CRM系统中在客户列表页面点击修改按钮进入一个客户信息的编辑页面
①编写Action
public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
// 模型驱动使用的对象:
private Customer customer = new Customer();
@Override
public Customer getModel() {
return customer;
}
public String edit() {
//先查询
customer = customerService.findById(customer.getCust_id());
//ActionContext.getContext().getValueStack().push(customer);
return "editSuccess";
}
}
下图中的空对象它只有一个属性cust_id有值,它的产生是我们在点击修改按钮,用提交过来的cust_id封装形成的,默认位置在栈顶,当查询完整个customer信息后封装的对象我们没有压栈的话默认会在model中,压栈的话就会在栈顶新添一个customer对象。
当我们去掉注释,做了压栈操作后
②我们采用第一种存值方式在页面上取值需要加model,用第二种方式取值可以直接调用属性
注意:若回显页面采用的是struts2的标签,那么只要标签name属性值与返回对象的属性值相同则可以自动填充
这里虽然使用了struts2标签但对象默认不在栈顶,所以数据要手动填充
<TR>
<td>固定电话 :</td>
<td>
<s:textfield class="textbox" id="sChannel2"
style="WIDTH: 180px" maxLength="50" name="cust_phone" value="%{model.cust_phone}">
</s:textfield>
</td>
<td>移动电话 :</td>
<td>
<s:textfield class="textbox" id="sChannel2"
style="WIDTH: 180px" maxLength="50" name="cust_mobile" value="%{model.cust_mobile}">
</s:textfield>
</td>
</TR>
③回显下拉列表中选中的值
$(function(){
$.post("${pageContext.request.contextPath}/baseDict_findByTypeCode.action",{"dict_type_code":"002"},function(data){
$.each(data,function(i,n){
//发送请求获取下拉列表所有值
$("#cust_source").append("<option value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");
});
//设置之前选中的值为默认值
$("#cust_source option[value='${model.baseDictSource.dict_id}']").prop("selected","selected");
},"json");
});
2.要回显的数据默认放在栈顶
在列表展示页面选择完查询条件,点击查询刷新页面后将查询条件回填并展示对应查询结果
<TD>客户名称:</TD>
<TD><INPUT class=textbox id=sChannel2
style="WIDTH: 80px" maxLength=50 name="cust_name" value="<s:property value="cust_name"/>"></TD>
点击查询,后台将接收到的查询条件封装为一个customer对象放在栈顶,然后根据条件查询返回一个集合,再跳转回列表展示页面,带有查询条件的customer对象默认在栈顶,则可以在页面直接回填查询条件。该客户名称属性与栈中对象属性一致可以自动回填数据,由于其他三个下拉列表选项没有使用struts2标签,则下拉列表的选中值则需要手动回填
$(function(){
$.post("${pageContext.request.contextPath}/baseDict_findByTypeCode.action",{"dict_type_code":"002"},function(data){
$.each(data,function(i,n){
$("#cust_source").append("<option value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");
});
$("#cust_source option[value='${model.baseDictSource.dict_id}']").prop("selected","selected");
},"json");
});
3.页面回显list集合
<tr>
<td>所属客户:</td>
<td colspan="3">
<s:select list="list" name="customer.cust_id" headerKey="" headerValue="-请选择-" listKey="cust_id" listValue="cust_name">
</s:select>
</td>
</tr>
将查到的客户集合传到下拉列表中自动回填,编写action,这里做了压栈操作将集合压入栈顶
/**
* 跳转到添加页面
*/
public String saveUI() {
//查询所有客户
List<Customer> list = customerService.findAll();
ActionContext.getContext().getValueStack().set("list", list);;
return "saveUI";
}