SpringとHibernateの動作について質問したいと思います。私はオブジェクト作成ページを作成しようとしていますが、何度か試してみると、あなたの助けを求めることになります。 Hibernate - BindingResultとBean名 'venueType'のプレーンターゲットオブジェクトはリクエスト属性として利用できません
I持つオブジェクト、他のオブジェクト、VenueType参照保有会場:
Venue.java
@Entity
@Table(name = "VENUE")
public class Venue extends CommonEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotEmpty
@Column(name = "NAME", nullable = false, length = 60)
private String name;
@ManyToOne(optional = false)
@JoinColumn(name = "VENUE_TYPE_ID")
private VenueType venueType;
@NotEmpty
@Column(name = "ADDRESS", nullable = false, length = 100)
private String address;
@NotEmpty
@Column(name = "TOWN", nullable = false, length = 60)
private String town; (...)
VenueType.java
@Entity
@Table(name = "VENUE_TYPE")
public class VenueType extends CommonEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotEmpty
@Column(name = "NAME", nullable = false, length = 30)
private String name; (...)
Inを私のコントローラ、私は実装している他の簡単なクラスのようにしようとしました:
VenueController.java私の.jspファイルで
@Controller
@RequestMapping(value = "/venue")
public class VenueController {
@Autowired
private VenueService service;
@Autowired
private VenueTypeService venueTypeService;
@RequestMapping(method = RequestMethod.GET)
public String getAll(ModelMap model) {
model.addAttribute("venues", service.findAll());
return Venue.getViewFolder() + "/" + "listAll";
}
@RequestMapping(value = "/new", method = RequestMethod.GET)
public String loadCreateVenuePage(ModelMap model) {
model.addAttribute("venueTypes", venueTypeService.findAll());
model.addAttribute("venue", new Venue());
return Venue.getViewFolder() + "/" + "create";
}
@RequestMapping(value = "/new", method = RequestMethod.POST)
public String createVenue(@ModelAttribute("venue") Venue venue) {
service.save(venue);
return "redirect:/venue";
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String readVenuePage(@PathVariable("id") String id, ModelMap model) {
model.addAttribute("venueTypes", venueTypeService.findAll());
Venue venue = service.findById(Integer.parseInt(id));
model.addAttribute("venue", venue);
return VenueType.getViewFolder() + "/" + "update";
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String updateVenue(@ModelAttribute("venue") Venue venue) {
service.update(venue);
return "redirect:/venue";
}
、私は非常に単純なコードを持って、でもそれにCSSを適用していません。
会場/ create.jsp
<body>
<h1>Creating Venue</h1>
<form:form action="./new" method="POST" commandName="venue">
<form:label path="name">Name</form:label>
<form:input path="name"/>
<br/>
<form:label path="address">Address</form:label>
<form:input path="address"/>
<br/>
<form:label path="town">Town</form:label>
<form:input path="town"/>
<br/>
<form:label path="postcode">Post Code</form:label>
<form:input path="postcode"/>
<br/>
<form:label path="country">Country</form:label>
<form:input path="country"/>
<br/>
<form:label path="venueType">Venue Type</form:label>
<form:select path="venueType">
<form:option value="" label="Select an option"/>
<form:options items="${venueTypes}" itemValue="id" itemLabel="name"/>
</form:select>
<br/>
<input type="submit" value="Submit"/>
</form:form>
</body>
「/新規」アドレスにアクセスしようとすると、例外java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'venueType' available as request attribute
が発生します。私はいくつかの問題に出くわしました。ほとんどの場合、commandName/modelAttributeがないか、ModelMapに新しいオブジェクトが追加されています。問題の原因を突き止める手助けができたら、私は非常に感謝しています。前もって感謝します。
EDIT: 'venue/update.jsp'ページは 'venue/create.jsp'と同じですが、隠された 'id'フィールドが追加されています。
PS :例外自体で示唆されているように、 "venueType"のプレーンオブジェクトを追加しようとすると、例外ページのロードが停止しますが、代わりに "venue"ページの代わりに対応する "venueType"ページがロードされます。 –