gpt4 book ai didi

java - 如何在 Spring MVC Web 应用程序中注册格式化程序?

转载 作者:行者123 更新时间:2023-11-30 09:02:52 24 4
gpt4 key购买 nike

我在绑定(bind)模型属性中的嵌套对象时遇到问题。我有一本书,其中嵌套了类主题,如下所示:

@Entity
@Table(name = "book")
public class Book {

// Other properties...
// With all getter setter..
@ManyToOne
@JoinColumn(name="subject_id",nullable=false)
@NotBlank(message = "Please select subject")
private Subject subject;
// Getter setter of subject;
}

我还为 Subject 实现了 Formatter 类,如下所示:

@Component
public class SubjectFormatter implements Formatter<Subject>{

@Autowired
SubjectService subjectService;

@Override
public String print(Subject object, Locale locale) {
return object.getName();
}

@Override
public Subject parse(String id, Locale locale) throws ParseException {
return subjectService.getSubject(id);
}
}

并在 spring 配置中添加格式化程序:

@EnableWebMvc
@Configuration
@PropertySource(value = { "classpath:application.properties" })
@ComponentScan(basePackages = "com.vbera.main")
@EnableJpaRepositories(basePackages = "com.vbera.main")
public class SpringConfiguration extends WebMvcConfigurerAdapter {

//Other bean definitions...

@Bean(name="conversionService")
public FormattingConversionService conversionService() {
FormattingConversionServiceFactoryBean bean = new FormattingConversionServiceFactoryBean();
bean.setRegisterDefaultFormatters(false);
bean.setFormatters(getFormatters());
return bean.getObject();
}

private Set<Formatter> getFormatters() {
Set<Formatter> converters = new HashSet<Formatter>();
converters.add(new SubjectFormatter());
return converters;
}
}

我仍然在提交时遇到异常:

Failed to convert property value of type java.lang.String to required type com.vbera.main.pojo.Subject for property subject

主题列表呈现的 JSP View :

<form:label path="subject" for="subject">Subject</form:label>
<form:select path="subject" class="form-control input-md">
<form:option value="">--- Select ---</form:option>
<form:options items="${subjectList}" itemLabel="name"
itemValue="id" />
</form:select>

最佳答案

您的 mvc.xml 中有两个部分文件。

  1. 添加 bean 转换服务 bean:
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="MyFormatter1" />
<ref bean="MyFormatter2" />
</set>
</property>
<property name="converters">
<set>
<ref bean="MyConverter1" />
<ref bean="MyConverter2" />
</set>
</property>
</bean>
  1. 在注释驱动的标记中引用此 bean。

<mvc:annotation-driven conversion-service="conversionService" />

大多数时候使用 ID 是可以的。但是,在表单中,它会强制 Spring 创建一个具有 null Id 的空对象而不是 null 对象。

关于java - 如何在 Spring MVC Web 应用程序中注册格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25861430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com