我有两个实体: StoryType 和故事。 StoryType可能有很多故事。
@Entity
@Table(name = "stories")
public class Story {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@Column(name = "crdate")
@Temporal(TemporalType.TIMESTAMP)
private Date crDate;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "story_type_id")
private StoryType storyType;
}
@Entity
@Table(name="story_types")
public class StoryType {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(fetch = FetchType.EAGER, mappedBy="storyType", cascade = CascadeType.ALL)
private List<Story> stories;
}
我在jsp页面上有表格,我在这里添加故事,我应该选择故事的类型。但是当我看到提交的值时,只有名称和描述,storyType - null。如何从select中发送对象,甚至只输入id?
<form role="form" action="/admin/add-story" method="post" commandName="story">
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" id="name" autofocus="true" placeholder="Enter name" value="${story.name}">
</div>
<div class="form-group">
<label for="name">Type</label>
<select class="form-control">
<c:forEach items="${types}" var="type">
<option name="storyType" value="${type}">${type.name}</option>
</c:forEach>
</select>
</div>
<div class="form-group">
<label for="description">Desscription</label>
<input type="text" name="description" class="form-control" id="description" autofocus="true" value="${story.description}">
</div>
<input type="submit" class="btn btn-primary" value="Save"/>
</form>
答案 0 :(得分:2)
在客户端中,您只能存储id
的{{1}}
StoryType
将数据发布到服务器时,客户端会将<select class="form-control">
<c:forEach items="${types}" var="type">
<option name="storyType" value="${type.id}">${type.name}</option>
</c:forEach>
</select>
发布到服务器。我们创建一个Spring Converter来从数据库中获取type.id
对象。
StoryType
注册convertionService
public class StoryTypeConverter implements Converter<String, StoryType >{
@Autowired
private StoryTypeService storyTypeService;
public StoryType convert(String id) {
return storyTypeService.findById(Long.valueOf(id));
}
}
之后,控制器中的对象将包含StoryType。 我是否有另一种方法来解决这个问题。 认为它可以帮助