package com.sdjt.util.page;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
public class PageData extends HashMap implements Map{
/**
* 自动将页面数据放入PageData对象中,当从页面获取数据时 new的时候要传request
* request.getParameter(arg0): get(arg0)或getString(arg0)
* request.getParameterValues(arg0): getValues(arg0)方法
* 本类也可以当做一个普通的Map使用,new的时候不要传参数
* author:lqf
*/
private static final long serialVersionUID = 1L;
Map map = null;
HttpServletRequest request;
//从页面获取数据
public PageData(HttpServletRequest request){
this.request = request;
map = request.getParameterMap();
//当表单提交类型为"multipart/form-data"时,request.getParameterMap()返回的是一个HashMap,没有setLocked方法
if("ParameterMap".equals(map.getClass().getSimpleName())) {
Method method;
try {
method = map.getClass().getMethod("setLocked",new Class[]{boolean.class});
method.invoke(map,new Object[]{new Boolean(false)});
} catch (Exception e) {
e.printStackTrace();
}
}
}
//普通的Map
public PageData() {
map = new HashMap();
}
@Override
public Object get(Object key) {
Object obj = null;
if(map.get(key) instanceof Object[]) {
Object[] arr = (Object[])map.get(key);
obj = request == null ? arr:(request.getParameter((String)key) == null ? arr:arr[0]);
} else {
obj = map.get(key);
}
return obj;
}
//本方法只能用于从页面获取数组,例如相同名字的checkbox
public String[] getValues(Object key) {
return request == null ? null:request.getParameterValues((String)key);
}
public String getString(Object key) {
return (String)get(key);
}
@SuppressWarnings("unchecked")
@Override
public Object put(Object key, Object value) {
return map.put(key, value);
}
@Override
public Object remove(Object key) {
return map.remove(key);
}
public void clear() {
map.clear();
}
public boolean containsKey(Object key) {
// TODO Auto-generated method stub
return map.containsKey(key);
}
public boolean containsValue(Object value) {
// TODO Auto-generated method stub
return map.containsValue(value);
}
public Set entrySet() {
// TODO Auto-generated method stub
return map.entrySet();
}
public boolean isEmpty() {
// TODO Auto-generated method stub
return map.isEmpty();
}
public Set keySet() {
// TODO Auto-generated method stub
return map.keySet();
}
@SuppressWarnings("unchecked")
public void putAll(Map t) {
// TODO Auto-generated method stub
map.putAll(t);
}
public int size() {
// TODO Auto-generated method stub
return map.size();
}
public Collection values() {
// TODO Auto-generated method stub
return map.values();
}
}
分享到:
相关推荐
1. **Book类**:表示图书的基本信息,包括书ID、书名、作者、出版社、出版日期、库存数量和价格等属性,以及与图书相关的操作方法,如获取和设置属性、打印图书详情等。 2. **Customer类**:表示顾客信息,包括顾客...
通过这些文件,开发者可以深入研究通信工具的具体实现,包括如何设置TCP连接,如何封装和解析消息,以及如何在用户界面上实时反映通信状态。 总结来说,这个一对一局域网通讯工具是使用Delphi 5开发的,利用其丰富...
13. **关联封装**:为了指定一个封闭库到新创建的symbol中,可以使用`Tools > PADS Decal Browser`。需要注意的是,在PADS中使用`File > Library > Manage Lib List > Add`来增加相应的pads封装库文件(*.pt07)。 14....
ClientSocket通常设置其Host属性为服务器的IP地址或域名,Port属性为服务器监听的端口号,然后调用Connect方法建立连接。一旦连接建立,就可以通过Write和Read方法进行数据的发送和接收。 - **ServerSocket**: ...
该人软件暂时可以绘制:线性曲线图,玫瑰图,并可对生成的图片样式进行属性设置 本软件操作完全模仿桌面操作界面样式,提高了用户体验,所有操作在一个页面上完成,实现桌面软件窗体样式 使用说明: ...........
4. **属性封装**:将可以调整的属性封装为公共的实例变量或属性,如borderWidth、borderColor、font、textColor等,以便在代码中进行设置。 5. **KVC(Key-Value Coding)和KVO(Key-Value Observing)**:为了实现...
2. **开放封闭原则**:类应该对扩展开放,对修改关闭。 3. **里氏替换原则**:子类型必须能够替换它们的基类型,而不影响程序的正确性。 4. **依赖倒置原则**:依赖于抽象而不是具体实现。 5. **接口隔离原则**:...
MVC将应用程序逻辑划分为明确的层次,提高了代码的可维护性和可扩展性,遵循“对扩展开放,对修改封闭”的设计原则。然而,过度使用MVC可能会导致结构复杂,影响运行效率,特别是在小型项目中。 单例模式是iOS开发...
在VFP中,对象具有众多属性,可以在设计时或运行时进行设置,并且支持封装性、多态性和继承性。 3. **类**:类是对象的模板,是对具有相同属性和行为特征的对象的抽象描述。类定义了对象的一般属性和行为,VFP提供...
编写控件的具体实现代码时,应在封闭的`<public:component>`标签内,采用`<script language="javascript">`嵌入javascript或vbscript(虽然不推荐混用)。每个自定义脚本块需正确关闭,确保代码结构清晰。 #### ...
通过封装这些属性和方法,使得代码结构更加清晰,也便于后续的功能扩展和维护。同时,`Food`类和`Boundary`类分别对游戏中的食物和边界进行抽象,让游戏逻辑的实现更为直观。 事件驱动编程是游戏开发中的一个核心...
- 游戏对象模型:定义吃豆人、幽灵、豆豆等类,封装各自的行为和属性。 - 游戏逻辑处理:实现游戏循环,处理用户输入、移动对象、检测碰撞等。 - 用户交互界面:设置按钮和菜单项,响应用户的操作请求。 - 错误处理...
1. **封装**:封装是指将对象的状态信息(即数据)隐藏在对象内部,不允许外部程序直接访问,而是通过该类提供的成员函数来实现对状态信息的操作。 2. **继承**:继承是子类自动共享父类数据结构和方法的机制,这是...
+ 封装:曲面封装的最大圆周孔设为0 + 语言设置:中国大陆 四、点云处理流程 * 逆向设计流程: 1. 导入点云数据 2. 对点云数据进行处理 3. 生成三角网格模型 4. 将三角网格模型转换为 CAD 模型 五、实例...
3. **图形用户界面(GUI)**:`Form1.cs`和`DimensionsDialog.cs`包含了对用户界面的处理,如按钮点击事件、文本输入验证等。`Form1.resx`和`DimensionsDialog.resx`是资源文件,存储了界面布局和控件的属性。 4. *...
在微信小程序的开发中,自定义组件是一种非常重要的特性,它允许开发者将复杂的功能或界面封装成可复用的组件,提升代码的可维护性和应用的扩展性。本压缩包"小程序——自定义组件.rar"可能包含了一系列关于如何创建...
这种设计模式遵循了软件工程中的“开放封闭原则”——即对扩展开放,对修改封闭,保证了代码的灵活性和可维护性。 #### 应用场景 重写后的`WebTextBox`适用于各种需要进行复杂数据验证的Web应用程序,如在线表单、...
3)封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类...
1. **继承与泛化**:继承是特殊类继承一般类的属性和操作,泛化是一般类对特殊类的抽象,两者共同构建类的层次结构。 2. **聚合与组合**:聚合体现"整体-部分"关系,是临时的或弱关联;组合是强关联,表示组件对象...
1. 封闭性:对象内部的数据和操作对外部是隐藏的,只通过预设的接口与外界交流。 2. 继承性:子类可以继承父类的属性和方法,实现代码复用。 3. 多态性:同一消息可以被不同类型的对象响应,实现不同的行为。 C++...