如何优化下面的代码

时间:2014-03-20 08:44:09

标签: java spring jsp spring-mvc

我在春季项目上编程。 Formatter(org.springframework.format.Formatter)用于将模型中的实体转换为String,以便在JSP页面中打印出来,并再次将字符串转换为实体,以便控制器可以直接处理实体。我跟着宠物诊所的例子。

public class PetTypeFormatter implements Formatter<PetType> {

    private final ClinicService clinicService;


    @Autowired
    public PetTypeFormatter(ClinicService clinicService) {
        this.clinicService = clinicService;
    }

    @Override
    public String print(PetType petType, Locale locale) {
        System.out.println("PetTypeFormatter: print");
        return petType.getName();
    }

    @Override
    public PetType parse(String text, Locale locale) throws ParseException {
        System.out.println("PetTypeFormatter: parse");      
        Collection<PetType> findPetTypes = this.clinicService.findPetTypes();
        for (PetType type : findPetTypes) {
            if (type.getName().equals(text)) {
                return type;
            }
        }
        throw new ParseException("type not found: " + text, 0);
    }

}

Controller具有名为“types”的模型属性,映射到声明为以下代码的Collection:

    @ModelAttribute("types")
    public Collection<PetType> populatePetTypes() {
        return this.clinicService.findPetTypes();
    }

在JSP页面中,创建一个选择框,该框应该通过 PetTypeFormatter.print()方法列出String中的所有类型。您只需要解析类型以选择框名称字段。

 <petclinic:selectField names="${types}" name="type" label="Type" size="5"/>

反过来,使用select box中的select string, PetTypeFormatter.parse()方法将字符串转换为PetType实体,以便控制器处理。

我的问题是我需要很多实体才能进行这种格式化。复制代码并为不同的实体对象创建10个以上的格式化程序后,我觉得必须有更好的模式才能使代码看起来更简洁。任何人都可以给我一些建议吗?谢谢!

0 个答案:

没有答案