【问题标题】:Spring controller keeps old value弹簧控制器保持旧值
【发布时间】:2013-12-09 14:02:27
【问题描述】:

我正在开发一个使用 Spring 注入的系统。在某个时间点,屏幕上会出现一条警告,该警告使用 WarningHelper 类的属性显示,该类是 Spring 控制器。以下是总结代码:

@Controller
@Scope(WebApplicationContext.SCOPE_SESSION)
public class WarningHelper implements Serializable {
     //Bunch of attributes
     private String warningText;

     //Bunch of other methods

     private String configureWarning(Integer caller, Outcome outcome, WarningReturn warningReturn, GlobalWebUser user) {
            //business logic

    if (hasWarning()) {
        setWarningText(warningReturn.getWarningText());
    }

    return redirect;
 }
}

那部分工作得很好。稍后,一个 xhtml 页面使用另一个注入了第一个控制器的控制器显示此警告。以下是第二个控制器的编辑代码:

@Controller
@Scope(WebApplicationContext.SCOPE_APPLICATION)
public class CustomUrlController {

    //Bunch of other attributes
@Inject
private WarningHelper warningHelper;    

    //Bunch of methods
    public String getAllMessages() {
        String completeMessage = "";
        //business logic creating the message
        completeMessage += warningHelper.getWarningText();

        return complete Message
    }   
}

这一切都在第一次工作得很好。问题是,如果我尝试输入另一个具有不同消息的配置文件,仍然会显示第一个配置文件。注意这个更改过程不涉及再次登录,所以会话还是一样的。我试过玩弄范围,但无济于事。

【问题讨论】:

    标签: java spring controller code-injection


    【解决方案1】:

    WarningHelperCustomUrlController 类中将 @Scope(WebApplicationContext.SCOPE_SESSION) 更改为 @Scope(WebApplicationContext.SCOPE_REQUEST)。这将为每个请求实例化 CustomUrlControllerwarningHelper

    【讨论】:

    • 似乎有效。我会再测试一些,但初步测试很好!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多