最近,我需要在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
,在我的情况下如何应用这些注释?
桃花长相依
相关分类