//这是父类代码
@SuppressWarnings( { "serial", "unchecked" })
public abstract class AbstractCrudAction<T, M extends Manager>
extends BaseAction implements Preparable, ModelDriven {
/**
* 定义显示单个实体的页面
*/
public static final String VIEW = "view";
/**
* 定义显示实体列表的页面
*/
public static final String INDEX = "index";
/**
* Action所使用的Manager类
*/
private M manager;
/**
* Action所管理的Entity
*/
private T model;
/**
* Action所管理的实体的类型
*/
private Class entityClass;
/**
* 用于保存查询结果。
*/
protected Collection<T> items;
/**
* 用于对应页面上CheckBox,List等组件的选择值.
*/
protected Serializable[] selectedItems;
/**
* 用于保存分页查询结果
*/
private Page page;
/**
* 创建一个新的实体,如果成功,返回index页面,如果失败,返回输入页面.
*/
public String create() {
//代码略
}
/**
* <B>创建或更新</B>一个实体,如果成功,返回index页面,如果失败,返回输入页面.
* <code>save()</code>相当于调用{@link create()}和{@link update()},
* 为了简化jsp编码,可以将新建和编辑页面合二为一,此时,<code>save()</code>方法.
*
*/
public String save() {
//代码略
}
/**
* @see {@link #save()}
*/
public String update() {
return SUCCESS;
}
/**
* 列出实体
*/
@SkipValidation
public String index() {
//代码略
}
/**
* 根据<code>Id</code>查询单个<code>model</code>并定向到显示它的页面.
*/
@SkipValidation
public String view() {
return VIEW;
}
/**
* 重定向到编辑页面。为了简化页面编程,将新建和编辑和为一个页面。
*/
@SkipValidation
public String edit() {
return INPUT;
}
/**
* 重定向到新建页面。为了简化页面编程,将新建和编辑和为一个页面。
*/
@SkipValidation
public String editNew() {
return INPUT;
}
/**
* 如果<code>id != null</code>,则删除ID所代表的Entity, 否则,如果<code>selectedItems.length > 0</code>则删除
* <code>selectedItems</code>所代表的所有Entities.
* @return
*/
@SkipValidation
public String remove() {
//代码略
}
// Method from Preparable
/**
* @see com.opensymphony.xwork2.Preparable#prepare()
*/
public void prepare() {
if (model == null || extractId(model) == null) {
model = (T) ReflectUtil.newInstance(getEntityClass());
} else {
model = (T) manager.get(extractId(model));
}
}
/**
* 从{@link #model}中取得ID
* @param model 给定Model
* @return 实体对象的ID值
*/
protected abstract Serializable extractId(T model);
/**
* 将{@link #id}转换为实际的类型,子类必须根据持久化标识的类型实现,例如:<br>
* <pre>
* protected Serializable convertId(Serializable id) {
* return (id == nul) ? null : Integer.valueOf(id.toString());
* }
* </pre>
*/
protected abstract Serializable convertId(Serializable id);
// Protected methods
protected Class getEntityClass() {
if (entityClass == null) {
entityClass = GenericsUtil.getGenericClass(getClass(), 0);
}
return entityClass;
}
//Method from ModelDriven
/**
* @see com.opensymphony.xwork2.ModelDriven#getModel()
*/
public T getModel() {
if(model == null) {
model = (T) ReflectUtil.newInstance(getEntityClass());
}
return model;
}
// Getters and setters.
public void setModel(T model) {
this.model = model;
}
public void setManager(M manager) {
this.manager = manager;
}
protected M getManager() {
return manager;
}
public Collection<T> getItems() {
return items;
}
public Serializable[] getSelectedItems() {
return selectedItems;
}
public void setSelectedItems(Serializable[] selectedItems) {
this.selectedItems = selectedItems;
}
public Page getPage() {
return page;
}
}
//少了中间的DefaultCrudAction
@Validation
public class DeptAction extends DefaultCrudAction<Dept, DeptManager> {
/**
* 当前上级部门ID
*/
private Integer parentId;
/**
* 部门序列号管理器
*/
private DeptSerialNoManager serialNoManager;
/**
* 用于查询的部门名称
*/
private String deptName = StringUtils.EMPTY;
@Override
@SkipValidation
public String index() {
return INDEX;
}
@Override
@Validations(requiredStrings = { @RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "model.name", message = "部门名称是必须的.")})
public String save() {
}
/**
* 处理parentDept为null的情况
*/
@Override
@SkipValidation
public String edit() {
}
/**
* 重置所有部门编号
*/
@SkipValidation
public String updateSerialNo() {
serialNoManager.updateAllSerialNo();
return SUCCESS;
}
public DeptSerialNoManager getSerialNoManager() {
return serialNoManager;
}
public void setSerialNoManager(DeptSerialNoManager serialNoManager) {
this.serialNoManager = serialNoManager;
}
}
<package name="admin.dept" extends="struts-default" namespace="/admin/dept">
<action name="index" class="deptAction" method="index">
<result name="index" type="dispatcher">/pages/admin/dept/index.jsp</result>
</action>
<action name="editNew" class="deptAction" method="editNew">
<result name="input">/pages/admin/dept/edit.jsp</result>
</action>
<action name="edit" class="deptAction" method="edit">
<result name="input">/pages/admin/dept/edit.jsp</result>
</action>
<action name="remove" class="deptAction" method="remove">
<result name="success" type="redirect">index.do</result>
</action>
<action name="save" class="deptAction" method="save">
<result name="success" type="redirect">index.do</result>
<result name="input">/pages/admin/dept/edit.jsp</result>
</action>
<action name="updateDeptSerialNo" class="deptAction" method="updateSerialNo">
<result name="success" type="redirect">index.do</result>
</action>
</package>
<!--如果使用{},这个配置文件会更简单一些.-->
文章浏览阅读1.1k次。电池包在设计BDU 的时候 预充电阻计算计算方程: T = RC * Ln[(Vbatt - V0)/( Vbatt - Vpre)] 注:T为预充电时间,R为预充电阻,C为外部电容,Vbatt为电池包电压,V0为负载端闭合高压前..._电池bms预充电阻及预充时间的计算simulink
文章浏览阅读1w次,点赞2次,收藏5次。今天帮同学从一个网站上下载点数据, 但是上面有上百个链接, 一个一个点击下载实在是工作量太大。 于是自己就想找一个命令行下载工具并用Python写一个简单的脚本来替代这些工作。百度了一下, 找到了curlcurl: curl是利用URL语法在命令行方式下工作的文件传输工具。 [百科: http://baike.baidu.com/view/1326315.htm]官网: http:_bat脚本 curl 下载文件夹下所有文件
文章浏览阅读3.1w次,点赞21次,收藏142次。更新中..._cesium ue4
文章浏览阅读67次。1、Axure RP(Rapid Prototyping)Axure(读音为Ack-Sure)无疑是目前最受关注的原型开发工具,其能通过组件的方式帮助网站或软件设计师快速建立带有注释的原型(流程图、线框图),并凭借自定义可重用的元件、动态面板以及丰富的script能够建立基本功能或页面逻辑的动态演示文件。Axure借鉴了office的界面,能够让用户快速上手,并且提供了..._程序员原型法常用工具
文章浏览阅读145次。1、 uni.request(OBJECT) 发起网络请求参数名 类型 必填 默认值 说明url String 是 开发者服务器接口地址data Object/String/ArrayBuffer 否 请求的参数header Object 否 设置请求的 header,header 中不能设置 Referer。method String 否 GET (需大写)有效值:OPTIONS, GET...
文章浏览阅读368次。1. 关于Vim1.1 Vim的几种模式2. 启动Vim3. 文档操作4. 光标的移动4.1 基本移动4.2 翻屏4.3 标记5. 插入文本5.1 基本插入5.2 改写插入6. 剪切复制和寄存器6.1 剪切和复制、粘贴6.2 文本对象6.3 寄存器7. 查找与替换7.1 查找7.2 替换7.3 正则表达式8. 排版8.1 基本排版8..._hadoop vim是什么操作
文章浏览阅读6.3k次,点赞5次,收藏9次。最近,极光大数据根据极光调研平台收到的1684份有效问卷,发布了一份2018年3月中国程序员研究报告,涉及了程序员工作和生活等方方面面,现在笔者与大家分享一下:生活中的程序员婚恋篇七成程序员处于未婚状态,其中四成程序员为单身22-30岁的程序员中,只有19.3%已完成结婚生子的人生大事,在主要职业群体中比例为最低。看来说程序员是大龄青年的聚集地,此言非虚。42%的22-30岁受访程序员目前是单身。..._杭州软件比上海
文章浏览阅读4.4k次,点赞5次,收藏19次。之前在 Unity Built-in 管线中,我们在自定义 shader 中,可以使用一下代码来获取 Ambient 环境光的颜色:fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb但是在 Unity URP 中,发现不生效了,虽然 URP 中也有定义这个宏,定义在:#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" 中 #define UN_unity ambient
文章浏览阅读164次。转载于:https://www.cnblogs.com/sunyongjie1984/p/4319969.html
文章浏览阅读221次。find就不用多说了,就是递归遍历文件夹。which:有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。whereis:是在数据库中查找文件,在数据库(var/lib/slocate/slocate.db)中查找与文件名相匹配的二进 制文件、源文件和帮助手册文件,使用之前可以使用up..._linux中whereis locate which的区别
文章浏览阅读1.2k次。出现这种异常是因为没有设置 project.build.home.directory 参数,系统找不到源代码文件的位置。解决办法:1.首先下载源代码,可参考如何下载olat源代码并在eclipse中查看2.在部署的服务中找到 olat.local.properti_guidemo_main不显示
文章浏览阅读1.4k次。Rect 类定义了一个矩形结构,同样实现了 Parcelable 序列化接口。Rect 类定义了 left、top、right、bottom 四个成员变量,我们需要正确理解这 4 个成员变量的作用:left:矩形左边线条离 y 轴的距离top:矩形上面线条离 x 轴的距离right:矩形右边线条离 y 轴的距离bottom:矩形底部线条离 x 轴的距离矩形是一种非常常见的图_android根据rect坐标添加控件