status2从取值的方式

本文详细介绍了如何在Struts2框架中利用领域对象(通过实现ModelDriven接口)与Action交互,提供了从属性驱动Action到模型驱动Action的高效实践方法,包括直接操作领域对象的方法及其实现细节,以及与传统方法的对比总结。

可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动) Action和Model-Driven(模型驱动) Action。 
一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性 对应。 

二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将Object getModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似Struts的FormBean功能。 

在struts2中,提供了一种直接使用领域对象的方式,就是让action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在web层和业务层使用相同的对象。 

ModelDriven接口只有一个方法 
 public abstract java.lang.Object getModel();
该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)name来访问,而不需要使用(对象名.属性名)vo.name这种格式来访问了,在action也不需要对对象提供getter和setter方法了,但是必须要在action中进行实例化,获取参数方式:

1、使用默认的action的传递方式,即参数名和属性名一一对应。

2、自定义一个vo,在action中使用这个vo,view使用vo.属性名。
3、使用ModelDriven的方式。

ModelDriven的方式:

public class UserVo {
	private String name;
	private String pwd;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}


import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{

}

import org.han.BaseAction;
import org.han.vo.UserVo;

public class LoginAction extends BaseAction<UserVo>{

	private UserVo vo=new UserVo();
	public UserVo getModel() {
		// TODO Auto-generated method stub
		return vo;
	}
	public String login(){
		System.out.println(vo.getName());
		return null;
	}

}

  <body>
    <form action="login!login.action" method="post">
    
    <input type="text" name="name" />
    <input type="text" name="pwd" />
    <input type="submit" value="提交"/>
    </form>
  </body>


三种方法的总结:
第一种方法把form的值都放在action文件中,当form提交的项目很多的时候,action的内容将变得很多。项目少的时候可用。

第二种方法将form的值单独放在vo中,解决了action文件臃肿的问题,同时使form和action分开,较好。但是需要在设置和获取的jsp页面上进行标识。

第三种方法在第二种方法的基础上,通过实现特定的接口,去掉了action中的set和get方法,同时去掉了jsp页面上的标识。使后台程序的logic更加清晰。
<think>我们使用tkintertable来显示表格,并根据status列的值设置行背景色。 步骤: 1. 导入必要的库:pandas, tkinter, tkintertable等。 2. 创建Tkinter窗口。 3. 创建TableCanvas(即tkintertable的表格)。 4. 将pandas DataFrame转换为适合tkintertable的格式(字典列表,每个字典代表一行,键为列名,值为对应值)。 5. 加载数据到表格。 6. 遍历每一行,根据status列的值设置行的背景颜色。 注意:tkintertable中设置行颜色的方法是使用`setRowColors`方法,但注意它可能要求行索引(注意tkintertable的行索引是从0开始的)。 另外,tkintertable的文档较少,我们可能需要根据实际情况调整。 由于tkintertable是一个较老的库,可能不支持最新版本的Python,但这里我们假设使用Python3.6+。 安装(如果需要): pip install tkintertable 示例代码:</think>要在 `tkintertable` 中加载 Pandas DataFrame 并根据 `status` 列设置行背景色,请按以下步骤操作: ### 解决方案 ```python import pandas as pd import tkinter as tk from tkintertable import TableCanvas # 创建示例DataFrame data = {'id': [1, 2, 3, 4], 'task': ['A', 'B', 'C', 'D'], 'status': ['holding', 'running', 'waiting', 'running']} df = pd.DataFrame(data) # 创建主窗口 root = tk.Tk() root.title("DataFrame表格着色") # 创建TableCanvas frame = tk.Frame(root) frame.pack(fill='both', expand=True) table = TableCanvas(frame, data={}, # 初始空数据 rowheight=25, cellwidth=100, editable=False) table.show() # 转换DataFrame为tkintertable格式 def df_to_tablemodel(df): """将Pandas DataFrame转换为tkintertable的TableModel格式""" data_dict = {} for i, row in df.iterrows(): data_dict[i] = row.to_dict() table.model.data = data_dict table.model.setColumnKeys(df.columns.tolist()) table.redraw() # 设置行颜色 def color_rows(): """根据status列设置行背景色""" for row_index in range(len(df)): status = table.model.getValueAt(row_index, 'status') if status == 'holding': color = '#FFCCCB' # 浅红色 elif status == 'running': color = '#90EE90' # 浅绿色 elif status == 'waiting': color = '#FFFFE0' # 浅黄色 else: color = 'white' table.setRowColors(row_index, bg=color) # 设置整行背景色 # 加载数据并着色 df_to_tablemodel(df) color_rows() # 启动GUI table.redraw() root.mainloop() ``` ### 关键说明 1. **数据转换**: - `df_to_tablemodel()` 将 DataFrame 转换为 `tkintertable` 接受的字典格式 - 每行数据以 `{行索引: {列名: 值}}` 格式存储 2. **着色逻辑**: - 遍历每一行 (`for row_index in range(len(df))`) - 通过 `table.model.getValueAt(row_index, 'status')` 获取状态值 - `setRowColors()` 方法设置整行背景色 3. **颜色方案**: - `holding` → 浅红色 (`#FFCCCB`) - `running` → 浅绿色 (`#90EE90`) - `waiting` → 浅黄色 (`#FFFFE0`) - 默认 → 白色 ### 注意事项 1. 确保安装依赖: ```bash pip install pandas tkintertable ``` 2. 如果遇到 `No module named 'tkintertable'`,尝试: ```bash pip install git+https://github.com/dmnfarrell/tkintertable.git ``` 3. 表格刷新:修改数据后需调用 `table.redraw()` 刷新显示 4. 性能优化:大数据集建议分批加载[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值