我创建了一个具有递归关系的模型,但是当我在JSP视图中将其显示在form:select
中时,它返回有关数据类型转换的错误,如何在JSP视图中显示递归模型?
我正在使用Java 1.8和spring-core 4.1。
当我显示一个数据库行时,递归字段为null
,它可以工作,但是当我尝试显示一个递归字段填充了有效值的行时,它行不通并生成错误。
这是类别类别中的模型字段
@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(nullable=true)
private Category subCategory;
我的控制器向JSP视图发送了一个名为“ category”的Category对象
modelAndView.addObject("category", category);
在视图中,我通过以下形式显示对象:选择组件
<form:select path="subCategory.id"
id="category_subCategory"
multiple="false"
cssClass="form-control">
<form:option value="null">-</form:option>
<form:options items="${categories}"
itemValue="id"
itemLabel="name"/>
</form:select>
它没有显示组件,而是在下面破坏并产生错误:
2019年6月26日下午4:03:09 org.apache.catalina.core.ApplicationDispatcher调用SEVERE:Servlet [jsp]的Servlet.service()引发异常 java.lang.NumberFormatException:对于输入字符串:java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)...为“ null” ...
2019年6月26日下午4:03:09 org.apache.catalina.core.StandardWrapperValve在路径[/ ecommerce]的上下文中为Servlet [dispatcher]调用SEVERE:Servlet.service()引发异常[javax.servlet。 ServletException:javax.servlet.jsp.JspException:org.springframework.core.convert.ConversionFailedException:无法从java.lang.String类型转换为@ javax.persistence.Id @ javax.persistence.GeneratedValue java.lang.Integer用于值'null'; 嵌套的异常为java.lang.NumberFormatException:对于输入字符串:“ null”],根本原因为java.lang.NumberFormatException:对于输入字符串:“ null” ...
答案 0 :(得分:0)
好吧,我正在用Spring在Java中做一个项目,我必须创建一个名为Converters的文件夹,并为我拥有的所有域类创建一个Converter。 我需要创建两个转换器,一个从字符串到域类,反之亦然
此代码的一个示例是:
package converters;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import domain.Application;
@Component
@Transactional
public class ApplicationToStringConverter implements Converter<Application, String> {
@Override
public String convert(final Application application) {
String result;
if (application == null)
result = null;
else
result = String.valueOf(application.getId());
return result;
}
}
--------------------------------- AND ----------------- ----------
package converters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import repositories.ApplicationRepository;
import domain.Application;
@Component
@Transactional
public class StringToApplicationConverter implements Converter<String, Application> {
@Autowired
ApplicationRepository applicationRepository;
@Override
public Application convert(final String text) {
Application result;
int id;
try {
if (StringUtils.isEmpty(text))
result = null;
else {
id = Integer.valueOf(text);
result = this.applicationRepository.findOne(id);
}
} catch (final Throwable oops) {
throw new IllegalArgumentException(oops);
}
return result;
}
}
---------应用程序类----------
@Entity
@Access(AccessType.PROPERTY)
public class Application extends DomainEntity {
private Date moment;
private String explication;
private String urlCode;
@NotNull
public Date getMoment() {
return this.moment;
}
public void setMoment(final Date moment) {
this.moment = moment;
}
@NotNull
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
public String getExplication() {
return this.explication;
}
public void setExplication(final String explication) {
this.explication = explication;
}
@NotNull
@URL
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
public String getUrlCode() {
return this.urlCode;
}
public void setUrlCode(final String urlCode) {
this.urlCode = urlCode;
}
public Date getSubmitMoment() {
return this.submitMoment;
}
public void setSubmitMoment(final Date submitMoment) {
this.submitMoment = submitMoment;
}
}
----存储库类---------
package repositories;
import java.util.Collection;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import domain.Application;
@Repository
public interface ApplicationRepository extends JpaRepository<Application, Integer> {
@Query("select a from Application a where a")
public Collection<Application> getAllApplications();
}