什么是定义默认日期格式的最佳方法

时间:2014-11-11 18:14:46

标签: struts2 internationalization locale

我正在使用Struts2,

我有一个属性Action,我有一个属性Person,带有“date”属性。

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>

当我调用“create”方法时,Input显示为MM / dd / yy(短格式),当我提交表单时,Struts将日期作为相同格式呈现,但我想管理日期格式为“dd-MM-yyyy”

我看到了这个页面

http://www.mkyong.com/struts2/how-to-configure-global-resource-bundle-in-struts-2/

但是,我认为在Filter之前调用Listener方法,并且不能正常工作。

使用Struts管理Locale全局属性的最佳方法是什么?

通过Http会话用户设置区域设置的最佳方法是什么。

问候。

1 个答案:

答案 0 :(得分:0)

我用转换器解决了我的问题,我不知道这是不是最好的方法......但最后我能做到。

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);
}
}

用于注册转换器

我创建了一个文件(资源)

src / main / resources / xwork-conversion.properties(Maven Structure)

下一个内容:

 # syntax: <type> = <converterClassName>
 java.util.Date=com.roshka.javorai.webapp.struts.converter.CustomDateConverter