Java 在方法之间丢失modelattribute
此控制器正常工作Java 在方法之间丢失modelattribute,java,forms,spring-mvc,Java,Forms,Spring Mvc,此控制器正常工作 @SessionAttributes("giveForm") @Controller public class GiveFormController { private PersonDao personManager; private KeyCardManager database; private GiveFormValidator validator; public GiveFormController() { } @A
@SessionAttributes("giveForm")
@Controller
public class GiveFormController {
private PersonDao personManager;
private KeyCardManager database;
private GiveFormValidator validator;
public GiveFormController() {
}
@Autowired
public GiveFormController(KeyCardManager database, PersonDao personManager, GiveFormValidator validator) {
this.database = database;
this.validator = validator;
this.personManager = personManager;
}
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(getValidator());
}
@RequestMapping(value = "/give", method = RequestMethod.GET)
public String give(Model model) {
GiveForm giveForm = new GiveForm();
model.addAttribute(giveForm);
return "give";
}
@RequestMapping(method = RequestMethod.POST, params = {"continue"})
public String go(@ModelAttribute("giveForm") @Valid GiveForm giveForm,
BindingResult result, Model model, SessionStatus status, HttpServletRequest request) {
String customer = giveForm.getCustomer();
if (!customer.isEmpty()) {
Person person = getPersonManager().findByUid(customer);
if (person != null) {
model.addAttribute("customerName", person.getCn());
model.addAttribute("userIdActive", person.isActive());
}
}
if (result.hasErrors()) {
return "give";
} else {
return "give-confirm";
}
}
@RequestMapping(method = RequestMethod.POST, params = {"cancel"})
public String cancel(@ModelAttribute("giveForm") GiveForm giveForm, SessionStatus status) {
status.setComplete();
return "index";
}
@RequestMapping(method = RequestMethod.POST, params = {"ready"})
public String ready(@ModelAttribute("giveForm") GiveForm giveForm, SessionStatus status,
HttpServletRequest request, Model model) {
System.out.println(giveForm.getKeyId());
status.setComplete();
model.addAttribute(giveForm);
if(getDatabase().insertGive(giveForm, request.getRemoteUser())) {
return "success";
}
else {
return "operationfailed";
}
}
但在将modelattribute获取到ready方法时,将返回null:
@SessionAttributes("takeForm")
@Controller
public class XXTakeFormController {
private TakeFormValidator validator;
private KeyCardManager database;
private PersonDao ldap;
public XXTakeFormController(){
}
@Autowired
public XXTakeFormController(TakeFormValidator validator, KeyCardManager database, PersonDao ldap) {
this.database = database;
this.validator = validator;
this.ldap = ldap;
}
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(getValidator());
}
@RequestMapping(value = "/take", method = RequestMethod.GET)
public String take(Model model) {
TakeForm takeForm = new TakeForm();
model.addAttribute(takeForm);
return "take";
}
@RequestMapping(method = RequestMethod.POST, params = {"continue"})
public String go(@ModelAttribute("takeForm") @Valid TakeForm takeForm,
BindingResult result, Model model, SessionStatus status) {
if (result.hasErrors()) {
return "take";
}
else {
String criteria = takeForm.getCriteria();
if (Character.isDigit(criteria.charAt(0))) {
// criteria is a keyId
String customer = getDatabase().getHolderOf(criteria);
takeForm.setCustomer(customer);
Person person = getLdap().findByUid(customer);
if (person != null) {
model.addAttribute("customerName", person.getCn());
}
model.addAttribute("customer", customer);
List keys = new ArrayList();
keys.add(getDatabase().getKey(criteria));
model.addAttribute("keys", keys);
} else {
// criteria is a userId
takeForm.setCustomer(criteria);
model.addAttribute("customer", criteria);
model.addAttribute("customerName", getLdap().findByUid(criteria).getCn());
model.addAttribute("keys", getDatabase().getKeysOf(criteria));
}
}
return "take-confirm";
}
@RequestMapping(method = RequestMethod.POST, params = {"cancel"})
public String cancel(@ModelAttribute("takeForm") TakeForm takeForm,
SessionStatus status) {
status.setComplete();
return "index";
}
@RequestMapping(method = RequestMethod.POST, params = {"ready"})
public String ready(@ModelAttribute("takeForm") TakeForm takeForm, SessionStatus
status, HttpServletRequest request,Model model) {
status.setComplete();
model.addAttribute(takeForm);
System.out.println(takeForm.getKeyId());
if(getDatabase().executeTake(takeForm.getKeyId(), request.getRemoteUser(), takeForm.getNotes())){
return "success";
}
else {
return "operationfailed";
}
}
这可能是我所忽视的。两个ready方法返回相同的简单视图。有人能帮我借一下眼睛吗?:)
它主要用于将数据设置为控制器中的模型。该数据将通过使用键名作为${key}
直接在jsp文件中检索 添加到模型中的所有数据都将通过使用
${name}
直接在jsp文件中访问。在ready()方法之前是否执行give()方法?因为它在give()方法中,您可以在其中实例化对象并将其添加到模型中。当您使用@SessionAttribute(“giveForm”)和@ModelAttribute(“giveForm”)时,spring会在会话中查找“giveForm”,如果您没有将“giveForm”对象添加到模型中,它会返回null。必须手动插入对象并将其添加到模型中。
model.addAttribute("key","value");