最近,我需要在Struts2中使用DI。我知道它使用它自己的DI实现,例如Guice,但不使用Guice,因为我找不到适合设置注入bean范围的注释。简而言之,我创建了一个bean//@Repository//@Scope("session")public class Session { private Map<String, Object> map = new HashMap<>(); public Map<String, Object> getMap() { return map; } public void setMap(Map<String, Object> map) { this.map = map; }}我已经评论了Spring Bean使用的注释。我通过spring DI成功创建了相同的bean,并设置了注入对象的范围。现在,我想对Struts2和DI做同样的事情。为此,我在中创建了bean定义。struts.xml<bean name="session" class="jspbean.struts.Session" scope="session"/>简单的操作即可创建该bean并将其注入到我的操作中public class DefaultAction extends ActionSupport { private Session session; // @Autowired @Inject("session") public void setSession(Session session) { this.session = session; } public Session getSession() { return session; } private Map<String, String> myMap = new HashMap<String, String>(); public Map<String, String> getMyMap() { return myMap; } public void setMyMap(Map<String, String> myMap) { this.myMap = myMap; } @Override public String execute() throws Exception { //populate my bean with sample data myMap.put("q1", "Question1"); myMap.put("q2", "Question2"); session.getMap().put("myMap", myMap); return SUCCESS; }}在JSP中,我在会话bean上使用了简单的迭代器<s:iterator value="session.map['myMap']"> <s:textfield name="myMap['%{key}']" value="%{value}" theme="simple" size="10" /><br></s:iterator>现在,当我运行这个小型应用程序时,我遇到了一个例外异常表明我需要设置范围策略。因此,我的问题是这个范围策略是什么以及如何在我的简单应用程序中实现它。此外,还有注释@Scoped,在我的情况下如何应用这些注释?
2 回答
桃花长相依
TA贡献1860条经验 获得超8个赞
我相信Luiggi的评论是正确的。“ @Inject”必须位于字段值本身上,而不是在setter上。
@Inject("session")
private Session session;
只要您在struts.xml中定义了“会话” bean或在Struts容器中注册了它,它就应该能够找到并注入它。从您的解释看来,情况确实如此。
有关更多特定信息,请查看有关Struts用户列表的讨论:内置DI上的Struts用户问题
添加回答
举报
0/150
提交
取消