Struts2 定义默认日期格式的最佳方式是什么
我用的是Struts2 我有一个属性的动作,我有一个属性人,有“日期”属性Struts2 定义默认日期格式的最佳方式是什么,struts2,internationalization,locale,Struts2,Internationalization,Locale,我用的是Struts2 我有一个属性的动作,我有一个属性人,有“日期”属性 class Person{ Date birthDate; //more properties } class MyAction implements ModelDriven<Person>{ Person person; public String create(){ person = new Person(); }
class Person{
Date birthDate;
//more properties
}
class MyAction implements ModelDriven<Person>{
Person person;
public String create(){
person = new Person();
}
public String save(){
MyPersistenceContext.save(person);
}
@Override
public PhysicalPerson getModel() {
return person;
}
}
<label class="col-sm-2 control-label">Birthdate</label>
<div class="col-sm-4">
<s:textfield name="birthDate" cssClass="form-control"></s:textfield>
<s:fielderror name="birthDate"
fieldName="birthDate"></s:fielderror>
</div>
班级人员{
出生日期;
//更多属性
}
类MyAction实现模型驱动{
个人;
公共字符串create(){
person=新的person();
}
公共字符串保存(){
MyPersistenceContext.save(个人);
}
@凌驾
公共PhysicalPerson getModel(){
返回人;
}
}
生日
当我调用“create”方法时,输入显示为MM/dd/yy(短格式),当我提交表单时,Struts将日期读取为相同的格式,但我希望使用“dd-MM-yyyy”格式管理日期
我看到那一页了
但是,我认为Listener方法是在过滤器之前调用的,并且不能很好地工作
使用Struts管理区域设置全局属性的最佳方法是什么
通过Http会话用户设置区域设置的最佳方法是什么
问候。我已经用转换器解决了我的问题,我不知道这是否是最好的方法。。。但最后我能做到
public class CustomDateConverter extends StrutsTypeConverter {
private static Logger logger = LoggerFactory.getLogger(CustomDateConverter.class);
private static final String DEFAULT_FORMAT = "dd-MM-yyyy";
private static Map<String, DateFormat> instances = new LinkedHashMap<>();
static DateFormat getInstance(String format) {
if (instances.containsKey(format)) {
return instances.get(format);
}
DateFormat dateFormat = new SimpleDateFormat(format);
instances.put(format, dateFormat);
return dateFormat;
}
@Override
public Object convertFromString(Map map, String[] values, Class aClass) {
try {
logger.info("convert from string");
DateFormat dateFormat = getInstance(DEFAULT_FORMAT);
Date date = (Date) dateFormat.parse(values[0]);
return date;
} catch (ParseException e) {
return values[0];
}
}
@Override
public String convertToString(Map map, Object o) {
logger.info("convertToString");
DateFormat dateFormat = getInstance(DEFAULT_FORMAT);
return dateFormat.format(o);
}
}
公共类CustomDateConverter扩展了StrutsTypeConverter{
私有静态记录器Logger=LoggerFactory.getLogger(CustomDateConverter.class);
私有静态最终字符串默认\u格式=“dd-MM-yyyy”;
私有静态映射实例=新LinkedHashMap();
静态日期格式getInstance(字符串格式){
if(instances.containsKey(格式)){
返回instances.get(格式);
}
DateFormat DateFormat=新的SimpleDateFormat(格式);
实例.put(格式、日期格式);
返回日期格式;
}
@凌驾
公共对象convertFromString(映射映射,字符串[]值,类aClass){
试一试{
logger.info(“从字符串转换”);
DateFormat DateFormat=getInstance(默认_格式);
Date Date=(Date)dateFormat.parse(值[0]);
返回日期;
}捕获(解析异常){
返回值[0];
}
}
@凌驾
公共字符串convertToString(映射,对象o){
logger.info(“convertToString”);
DateFormat DateFormat=getInstance(默认_格式);
返回日期格式。格式(o);
}
}
用于转换器的寄存器
我已经创建了一个文件(资源)
src/main/resources/xwork-conversion.properties(Maven结构)
下一部分内容:
# syntax: <type> = <converterClassName>
java.util.Date=com.roshka.javorai.webapp.struts.converter.CustomDateConverter
#语法:=
java.util.Date=com.roshka.javorai.webapp.struts.converter.CustomDateConverter
这是正确的:强制使用不同于JVM默认格式(对于请求区域设置)的日期格式的唯一方法是使用自定义的类型转换器。但是,不能像示例中那样缓存DateFormat
实例DateFormat.parse(字符串)
不是线程安全的。