Spring MVC模型数据不会更新

时间:2015-07-17 18:57:12

标签: spring spring-mvc model thymeleaf

我正在使用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";
    }
}
}

0 个答案:

没有答案