4

我是 Stripes 的新手,感谢每一个让我更接近正常运行的网络应用程序的提示!

技术设置:java、动态网络项目、条纹、jsp

场景

用户可以登录(index.jsp)。在正确的电子邮件地址和密码 (LoginFormActionBean.java) 之后,用户被转发到欢迎页面 (loggedin.jsp)。此欢迎页面上的内容类似于“欢迎<用户名>,您已成功登录!”。

实施

我在 index.jsp 中有一个表单,我在其中获取用户输入并将其传递给 LoginFormActionBean.java 中的方法 --> 有效!

在相应的方法中,我检查用户是否正确,如果正确,我将用户插入 ActionBeanContext:

getContext.setUser(loggedinUser);

之后我转发到 login.jsp:

return new ForwardResolution("/loggedin.jsp");

login.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)。

让用户对象脱离我使用的上下文:

public String getUser(){
    return getContext().getUser().toString();
}

此外,LoggedinBean.java 包含一个方法,该方法使用@DefaultHandler 进行注释并转发到loggedin.jsp(同一页面)

结果

现在,发生的情况是:正确登录后,我被转发到loggedin.jsp,“${loggedinBean.context.user}”行为空,< s:text >-字段也是如此。

但是单击“PrintUser”按钮后,“TextForm”-form 中的 <s:text>-field 被登录用户的用户对象填充!

结论

我认为发生的是,在我手动执行 bean 中的方法之前,没有调用 LoggedinBean.java 的“setContext()”方法。因为在按下按钮之前没有调用 bean 中的“setContext()”方法!

在线文档说要在JSP 中使用上下文属性只需编写“${actionBean.context.user}”。但是上下文是空的!

甚至《实用条纹》(2008 年)一书也没有提供有关使用 ActionBeanContext 的更多信息。

问题

那里发生了什么?

如何让“${loggedinBean.context.user}”行完全显示登录用户?

以及如何在加载 JSP 后让 < s:text >-field 显示用户对象,但不按下按钮?

我希望我的问题很清楚,我的言论令人满意

4

1 回答 1

1

我想推荐使用MVC 模式。这种模式将导致一种实现,即 Action Bean 将充当处理所有 http 请求的控制器,而 JSP 页面将成为几乎没有逻辑的被动视图,只能通过 Action Bean 控制器访问(不再直接访问 JSP 页面!) .

如果您使用此模式,您的 JPS 中始终有一个可用的“actionBean”,因此您可以参考 ${actionBean.context}(参见:getContext)。

于 2011-02-01T15:04:18.653 回答