- 浏览: 1230794 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lankk:
lankk 写道事实上,在运行String s1=new St ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
事实上,在运行String s1=new String(&qu ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
同意1楼的说法http://docs.oracle.com/j ...
理解String 及 String.intern() 在实际中的应用 -
raoyutao:
...
jdk 线程池 ThreadPoolExecutor -
hongdanning:
理解了。之前困惑的一些明白了。谢谢分享。
理解String 及 String.intern() 在实际中的应用
public enum Dimension implements Serializable, IntegerValuedEnum { LARGE(234, 60, 0), SMALL(125, 125, 1); private final int width; private final int height; private final int code; private Dimension(int width, int height, int code) { this.width = width; this.height = height; this.code = code; } public int getWidth() { return width; } public int getHeight() { return height; } @Override public int getCode() { return code; } public String getDisplay() { return "" + this.width + "*" + this.height; } }
public class IntegerValuedEnumType<T extends Enum & IntegerValuedEnum> implements EnhancedUserType, ParameterizedType { /** * Enum class for this particular user type. */ private Class<T> enumClass; /** * Value to use if null. */ private Integer defaultValue; public IntegerValuedEnumType() { } public void setParameterValues(Properties parameters) { String enumClassName = parameters.getProperty("enum"); try { enumClass = (Class<T>) Class.forName(enumClassName).asSubclass(Enum.class) .asSubclass(IntegerValuedEnum.class); } catch (ClassNotFoundException e) { throw new HibernateException("Enum class not found", e); } String defaultValueStr = parameters.getProperty("defaultValue"); if (defaultValueStr != null && !defaultValueStr.isEmpty()) { try { setDefaultValue(Integer.parseInt(defaultValueStr)); } catch (NumberFormatException e) { throw new HibernateException("Invalid default value", e); } } } public Integer getDefaultValue() { return defaultValue; } public void setDefaultValue(Integer defaultValue) { this.defaultValue = defaultValue; } /** * The class returned by <tt>nullSafeGet()</tt>. * * @return Class */ public Class returnedClass() { return enumClass; } public int[] sqlTypes() { return new int[] { Types.TINYINT }; } public boolean isMutable() { return false; } /** * Retrieve an instance of the mapped class from a JDBC resultset. * Implementors should handle possibility of null values. * * @param rs a JDBC result set * @param names the column names * @param owner the containing entity * @return Object * @throws HibernateException * @throws SQLException */ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException { Integer value = rs.getInt(names[0]); if (value == null) { value = getDefaultValue(); if (value == null) { // no default value return null; } } String name = IntegerValuedEnumReflect.getNameFromValue(enumClass, value); if (rs.wasNull() || name == null || name.isEmpty()) { return null; } else { return Enum.valueOf(enumClass, name); } } /** * Write an instance of the mapped class to a prepared statement. * Implementors should handle possibility of null values. A multi-column * type should be written to parameters starting from <tt>index</tt>. * * @param st a JDBC prepared statement * @param value the object to write * @param index statement parameter index * @throws HibernateException * @throws SQLException */ public void nullSafeSet(PreparedStatement st, Object value, int index) throws SQLException { if (value == null) { st.setNull(index, Types.TINYINT); } else { st.setInt(index, ((T) value).getCode()); } } public Object assemble(Serializable cached, Object owner) { return cached; } public Serializable disassemble(Object value) { return (Enum) value; } public Object deepCopy(Object value) { return value; } public boolean equals(Object x, Object y) { return x == y; } public int hashCode(Object x) { return x.hashCode(); } public Object replace(Object original, Object target, Object owner) { return original; } public String objectToSQLString(Object value) { return '\'' + String.valueOf(((T) value).getCode()) + '\''; } public String toXMLString(Object value) { return String.valueOf(((T) value).getCode()); } public Object fromXMLString(String xmlValue) { Integer value = Integer.parseInt(xmlValue); String name = IntegerValuedEnumReflect.getNameFromValue(enumClass, value); if (name == null || name.isEmpty()) { return null; } else { return Enum.valueOf(enumClass, name); } } }
public final class IntegerValuedEnumReflect { /** * Don't let anyone instantiate this class. * * @throws UnsupportedOperationException * Always. */ private IntegerValuedEnumReflect() { throw new UnsupportedOperationException("This class must not be instanciated."); } /** * All Enum constants (instances) declared in the specified class. * * @param enumClass Class to reflect * @return Array of all declared EnumConstants (instances). */ private static <T extends Enum> T[] getValues(Class<T> enumClass) { return enumClass.getEnumConstants(); } /** * All possible string values of the string valued enum. * * @param enumClass Class to reflect. * @return Available integer values. */ public static <T extends Enum & IntegerValuedEnum> int[] getStringValues( Class<T> enumClass) { T[] values = getValues(enumClass); int[] result = new int[values.length]; for (int i = 0; i < values.length; i++) { result[i] = values[i].getCode(); } return result; } /** * Name of the enum instance which hold the respecified string value. If * value has duplicate enum instances than returns the first occurrence. * * @param enumClass Class to inspect. * @param value The int value. * @return name of the enum instance. */ public static <T extends Enum & IntegerValuedEnum> String getNameFromValue( Class<T> enumClass, int value) { T[] values = getValues(enumClass); for (int i = 0; i < values.length; i++) { if (values[i].getCode() == value) { return values[i].name(); } } return null; } }
public class IntegerValuedEnumSetType<T extends Enum<T> & IntegerValuedEnum> implements EnhancedUserType, ParameterizedType { /** * Enum class for this particular user type. */ private Class<T> enumClass; public IntegerValuedEnumSetType() { } public void setParameterValues(Properties parameters) { String enumClassName = parameters.getProperty("enum"); try { enumClass = (Class<T>) Class.forName(enumClassName).asSubclass(Enum.class) .asSubclass(IntegerValuedEnum.class); } catch (ClassNotFoundException e) { throw new HibernateException("Enum class not found", e); } } /** * The class returned by <tt>nullSafeGet()</tt>. * * @return Class */ public Class returnedClass() { return enumClass; } public int[] sqlTypes() { return new int[] { Types.TINYINT }; } public boolean isMutable() { return false; } /** * Retrieve an instance of the mapped class from a JDBC resultset. * Implementors should handle possibility of null values. * * @param rs a JDBC result set * @param names the column names * @param owner the containing entity * @return Object * @throws HibernateException * @throws SQLException */ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException { Integer value = rs.getInt(names[0]); if (value == null) { return null; } return decode(value); } /** * Write an instance of the mapped class to a prepared statement. * Implementors should handle possibility of null values. A multi-column * type should be written to parameters starting from <tt>index</tt>. * * @param st a JDBC prepared statement * @param value the object to write * @param index statement parameter index * @throws HibernateException * @throws SQLException */ public void nullSafeSet(PreparedStatement st, Object value, int index) throws SQLException { if (value == null) { st.setNull(index, Types.TINYINT); } else { st.setInt(index, encode((EnumSet<T>)value)); } } public Object assemble(Serializable cached, Object owner) { return cached; } public Serializable disassemble(Object value) { return (Enum) value; } public Object deepCopy(Object value) { return value; } public boolean equals(Object x, Object y) { return x == y; } public int hashCode(Object x) { return x.hashCode(); } public Object replace(Object original, Object target, Object owner) { return original; } public String objectToSQLString(Object value) { return '\'' + String.valueOf(encode((EnumSet<T>)value)) + '\''; } public String toXMLString(Object value) { return String.valueOf(encode((EnumSet<T>)value)); } public Object fromXMLString(String xmlValue) { try { Integer value = Integer.parseInt(xmlValue); return decode(value); } catch (NumberFormatException e) { return EnumSet.noneOf(enumClass); } } /* * Encode the EnumSet into an integer based on bit on/off */ private int encode(EnumSet<T> set) { int ret = 0; for (T val : set) { ret |= 1 << val.getCode(); } return ret; } /* * Decode the integer back to a EnumSet based on bit on/off */ private EnumSet<T> decode(int code) { Map<Integer, T> codeMap = new HashMap<Integer, T>(); for (T val : EnumSet.allOf(enumClass)) { codeMap.put(val.getCode(), val); } EnumSet<T> result = EnumSet.noneOf(enumClass); while (code != 0) { int ordinal = Integer.numberOfTrailingZeros(code); code ^= Integer.lowestOneBit(code); result.add(codeMap.get(ordinal)); } return result; } }
public interface IntegerValuedEnum {
/**
* Current int value stored in the enum.
* @return int value.
*/
int getCode();
}
maping.xml
<property name="dimension" column="DIMENSION"> <type name="com.xxx.bbb.hibernate.IntegerValuedEnumType"> <param name="enum">com.xxx.bbb.beans.Dimension</param> </type> </property>
存到数据库只是 0 1 2
转换器
public class DimensionConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map arg0, String[] values, Class clazz) { if (values != null && values.length > 0 && values[0] != null && !values[0].isEmpty()) { String value = values[0]; if (value.equals("0")) { return Dimension.LARGE; } else if (value.equals("1")) { return Dimension.SMALL; } } return null; } @Override public String convertToString(Map arg0, Object o) { System.out.println(o.toString()); Dimension dimension = (Dimension) o; return String.valueOf(dimension.getCode()); } }
js
$("#dimensionSelect").val(${request.dimension.code});
<s:select id="dimensionSelect" name="dimension" list="#{@beans.Dimension@LARGE.code:@beans.Dimension@LARGE.display, @beans.Dimension@SMALL.code:@beans.Dimension@SMALL.display}" tabindex="4"/>
发表评论
-
struts2 url 映射 查看 Struts Configuration Browser
2012-02-17 18:21 1432查看所有struts2映射到的url 2个办法 ... -
(转) Struts2 URL参数 s:if 判断应用
2010-10-27 14:56 3549Struts2的s:if标签很怪异,下面来具体地看看,如何用s ... -
struts2 动态 跳转 result
2010-07-29 17:22 2417<action name="user&q ... -
struts2 国际化 文件名 格式
2010-07-08 18:30 1215今天突然发现当浏览器语言是zh-tw的时候,显示的还是简体中文 ... -
struts2 ServletActionContext
2010-05-19 18:30 1740structs2 中提供了ServletActionConte ... -
struts2 访问 静态属性 静态方法
2010-05-19 15:20 1853静态方法 <s:property value=&quo ... -
struts2 s:select list取值
2010-05-05 15:48 15758<s:select id="Select&qu ... -
struts2 ModelDriven update
2010-04-28 12:42 1239public class ContactAction exte ... -
struts2 date money 格式化输出
2010-04-27 18:37 1869<s:date name="#note.cre ... -
struts2 不验证 方法
2010-04-27 18:32 1439用了struts2 的验证框架(如:action-valida ... -
jsp 页面访问 list size()
2010-04-27 14:18 3364jstl 1、在jsp页面中不能通过${list . ... -
struts2 带参数的redirect json
2010-04-22 21:16 1750<action name="createAct ... -
struts2 S 标签 取得parametes 值 ognl 判断 null
2010-04-14 14:30 2029<s:hidden name="xId&quo ... -
DispathAction
2009-12-11 17:52 11941、如果复写DispatchAction中的execute方法 ... -
异常处理
2009-12-11 17:39 11831、编程式异常处理 * 截获某个异常 * 创建相应的异 ... -
I18N
2009-12-11 17:36 1443I18N public class I18N { ... -
动态ActionForm 采用struts上传
2009-12-11 17:34 20481、动态ActionForm * 动态ActionFor ... -
struts 乱码
2009-07-01 17:27 1144request经过struts处理后默认encoding是is ...
相关推荐
在这个“struts2枚举值、日期值转换示例”中,我们将关注如何自定义枚举值和日期值的转换器。 首先,枚举(Enum)在Java中是一种特殊的类,用于表示有限集合中的固定数量的值。在Struts2中,如果Action类的属性是...
1. **封装OGNL操作,实现值的传递**:Struts2通过对OGNL表达式的封装,实现从客户端传入的参数到Java对象之间的值传递。这一过程包括但不限于对各种复杂类型的处理,如数组、列表、映射等。 2. **类型转换**:为了...
2. **Converter**:是Struts2类型转换的核心接口,用于将Action属性的字符串值转换为适当的Java类型。Struts2提供了一系列内置的转换器,可以处理基本类型和一些常见的复杂类型,如Date和Enum。 3. **...
Struts2标签大全是Java Web开发中非常重要的一个部分,它是Struts2框架提供的一系列预定义的JSP标签,用于简化MVC(Model-View-Controller)模式下的视图层开发。这些标签大大提高了代码的可读性和可维护性,同时也...
在Struts2中,我们可以使用枚举类型来表示单选按钮的值。例如,我们可以定义一个枚举类型Gender: ``` public enum Gender { MAN, WOMEN } ``` 然后,我们可以使用枚举类型来生成单选按钮: ``` 男', Gender.WOMEN:...
在Java编程语言中,枚举(Enum)是一种特殊的类,用于定义一组预定义的常量。枚举类型在很多场景下被广泛使用,...在实际项目中,根据具体需求选择合适的框架或库提供的转换功能,可以大大简化枚举相关的数据处理工作。
2. `switch`语句的适用范围:在Java 7之前,`switch`仅支持`byte`, `short`, `char`, `int`或它们的封装类以及`Enum`类型。自Java 7起,`switch`可以处理`String`类型。 3. `Integer`与`int`的区别:`Integer`是`...
- **Enum**:枚举类型,用于表示一组固定的常量值。 #### 四、集合类、泛型、自动装箱与拆箱 - **集合类**:包括List、Set、Map等,用于存储和操作数据集合。 - **泛型**:提供类型安全的容器,避免运行时...
enumString="枚举值,以分号分隔,示例值:M(1,男);F(0,女) 或者是:M(男);F(女)" enumClassName="如果枚举有值,生成的类名称将是这个,没有枚举值,该配置无用.示例值:Sex" /> 数据库表名> --> 用户信息" > ...
框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp...
enum (关键字) execute vt.执行 ['eksikju:t] exhibit v.显示, 陈列 [ig'zibit] exist 存在, 发生 [ig'zist] '(SQL关键字 exists) extends (关键字) 继承、扩展 [ik'stend] false (关键字) final (关键字) ...
2. **access** - 访问:描述类、接口和变量的可访问性,如public、private、protected等访问修饰符。 3. **algorithm** - 算法:解决特定问题的步骤或过程,通常与计算机程序设计相关。 4. **Annotation** - 代码...
- `enum`:Java 5引入的枚举类型,用于创建固定的值集合。 3. **控制流**: - `assert`:断言,用于测试假设条件,如果条件为假,程序会抛出AssertionError。 - `continue`:终止当前循环的剩余部分,继续下一轮...
Struts 2 是一个基于 Java 的 Web 应用程序框架。 42. Java 注解 * Java 中什么是注解?注解是一种元数据,用于修饰类、方法和变量。 43. Java 泛型 * Java 中什么是泛型?泛型是一种机制,用于在编译时检查类型...
2. **枚举(Enum)**:比传统的常量类更安全,提供了固定的值集合。 3. **匿名内部类**:可以在需要的地方直接创建不需命名的新类实例。 4. **Lambda表达式**:Java 8引入的新特性,简化了函数式编程,如Stream ...
- 两个对象值相等(`x.equals(y) == true`),它们的`hashCode`可以不同。 - `equals`方法用于比较对象的内容是否相等,`hashCode`用于散列数据结构。 #### 十七、`String`类的继承 - `String`类是final的,不可被...
- **枚举(Enum)**:提供预定义的一组值,常用于表示固定数量的常量。 - **注解(Annotation)**:元数据,提供编译时或运行时的信息,如@Override、@Deprecated等。 5. **Java开发工具**: - **JDK(Java ...