我正在使用Thymeleaf模板引擎编写Spring MVC应用程序(最新的Spring)。我需要做的就是显示一个文本页面,但当然哪个文本取决于某些因素。
因为我认为我可以使用Java String对象作为我的模型。我试过这个,通过调试我明白了,数据被保存到模型中,如果我试图修改它,那么模型似乎没有注意到。
此外,似乎我的getDecisionText()方法(粘贴在下面)在网页点击代码之前就被调用了。我希望在我需要数据后返回视图(在本例中为Thymeleaf模板名称)后调用getDecisionText()方法。
哦,我确实计划修复我的数据库架构,但现在它不会导致我的问题。
我认为必须有一种方法可以告诉模型数据是瞬态的,并在每次需要时重新加载它?或许我的设计从一开始就只有100%的错误?
在其他几个方面,我尝试设置模型属性:
@ModelAttribute("decisionText")
private String getDecisionText()
{
Logger.getGlobal().info(() -> "Returning Dec Text: " + decisionText);
return decisionText;
}
以下是设置私有decisionText变量的方法:
private void setDecisionText(String dec)
{
AdminData ad = adRep.findById(1L);
if(dec.equals("DEC_A"))
{
decisionText = ad.getTextA();
}
if(dec.equals("DEC_B"))
{
decisionText = ad.getTextB();
}
if(dec.equals("DEC_C"))
{
decisionText = ad.getTextC();
}
Logger.getGlobal().info(() -> "Dec Text Set: " + decisionText);
}
我的控制器类的相关部分:
@RequestMapping(value="/", method=RequestMethod.POST)
public String loginSumbit(@Valid
@ModelAttribute("loginForm") ApplicantCredentialsData
applicantCredentialsData,
BindingResult br)
{
if(br.hasErrors())
{
return "loginForm";
}
else
{
ApplicantCredentialsData acd = acRep.findByLoginName(applicantCredentialsData.getLoginName());
if(acd == null)
{
Logger.getGlobal().info(() -> "Loginname not found");
return "loginForm";
}
String pw = applicantCredentialsData.getPassword().trim();
if(pw.equals(acd.getPassword().trim()))
{
Logger.getGlobal().info(() -> "Successfull Login");
Logger.getGlobal().info(() -> "Decision: " + acd.getDecision());
setDecisionText(acd.getDecision());
return "decisionPage";
}
else
{
Logger.getGlobal().info(() -> "Invalid password - Login failed");
return "loginForm";
}
}
}