我是Stripes的新手,并感谢每一个让我更接近功能强大的网络应用的暗示!
技术设置:java,动态网页项目,条纹,jsp
方案:
用户可以登录(index.jsp)。在正确的电子邮件地址和密码(LoginFormActionBean.java)之后,用户被转发到欢迎页面(loggedin.jsp)。 此欢迎页面上的内容类似于“welcome< username&gt ;,您已成功登录!”。
实施:
我在index.jsp中有一个表单,我在其中获取用户输入并将其传递给LoginFormActionBean.java中的方法 - >作品!
在相应的方法中我检查用户是否正确,如果是,我将用户插入ActionBeanContext:
getContext.setUser(loggedinUser);
之后我转发到loggedin.jsp:
return new ForwardResolution("/loggedin.jsp");
loggedin.jsp包含以下重要行:
<jsp:useBean id="loggedinBean" class="mywebapp.controller.LoggedinBean" scope="session" />
...
${loggedinBean.context.user} //show the whole user object
...
<s:form beanclass="mywebapp.controller.LoggedinBean" name="ButtonForm">
<s:submit name="foo" value="PrintUser" />
</s:form>
<s:form beanclass="mywebapp.controller.LoggedinBean" name="TextForm">
<s:text name="user" />
</s:form>
...
LoggedinBean.java包含MyActionBeanContext属性(如LoginFormActionBean.java)。
从我使用的上下文中获取userobject:
public String getUser(){
return getContext().getUser().toString();
}
此外,LoggedinBean.java包含一个方法,该方法使用@DefaultHandler注释并转发到loggedin.jsp(同一页面)
结果:
现在,会发生什么:正确登录后,我被转发到loggedin.jsp, “$ {loggedinBean.context.user}”行是空的,&lt;&lt; s:text&gt; -field。
但是在点击“PrintUser”按钮后,&lt; s:“TextForm”-form中的text&gt; -field填充了登录用户的用户对象!
结论:
我认为发生的是,在我手动执行bean中的方法之前,没有调用LoggedinBean.java的“setContext()”方法。因为在按下按钮之前没有调用bean中的“setContext()”方法!
online documentation表示在JSP中使用上下文属性只需编写“$ {actionBean.context.user}”。但是上下文是空的!
甚至连“实用条纹”一书(2008)都没有提供有关使用ActionBeanContext的更多信息。问题:
那里发生了什么?我怎样才能获得“$ {loggedinBean.context.user}”行来显示登录用户?
我怎样才能得到&lt; s:text&gt; -field在加载JSP后显示用户对象,但是没有按下按钮?
我希望我的问题很明确,我的言论令人满意
答案 0 :(得分:1)
我想推荐使用MVC pattern。这种模式将导致一个实现,Action Beans将充当处理所有http请求的控制器,JSP页面将成为逻辑很少的被动视图,只能通过Action Bean控制器访问(不再直接访问JSP页面!)
如果您使用此模式,您的JPS中始终可以使用“actionBean”,因此您可以参考${actionBean.context}
(请参阅:getContext)。