我正在使用Struts 1.3 + JPA(Hibernate作为持久性提供程序)开发一个简单的"Book Store"项目.我无法切换到Spring或任何其他更复杂的开发环境(例如,Jboss),我不能使用任何特定于Hibernate的技术(例如,Session类).
鉴于我在JSE环境中,我需要明确管理整个EntityManager的生命周期.
该Book实体定义如下:
@Entity
public class Book {
@Id private String isbn;
private String title;
private Date publishDate;
// Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)
我定义了三个Action类,分别负责检索所有书籍实例,通过其ISBN检索单个书籍实例并将分离的书籍合并到数据库中.
为了增加业务逻辑代码和数据访问代码之间的关注点分离,我引入了一个简单的BookDAO对象,负责执行CRUD操作.理想情况下,应将所有与数据访问相关的调用委托给持久层.例如,ListBookAction定义如下:
public class ListBookAction extends Action {
private BookDAO dao = new BookDAO();
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// Retrieve all the books
List<Book> books = dao.findAll();
// Save the result set
request.setAttribute("books", …Run Code Online (Sandbox Code Playgroud) 如果我有一个动作,其结果是redirectAction到另一个类中的另一个动作,是否有可能在结果动作中显示验证错误?例如,在下面的示例中,如果用户执行actionA(没有与之关联的视图),并且存在错误,是否有任何方法可以在actionB结果(foo.jsp)中显示这些错误?或者我是以完全错误的方式解决这个问题?
<package name="a" extends="struts-default" namespace="/a">
<action name="actionA" class="actionAClass">
<result name="input" type="redirectAction">
<param name="actionName">actionB</param>
<param name="namespace">/b</param>
</result>
<result type="redirectAction">
<param name="actionName">actionB</param>
<param name="namespace">/b</param>
</result>
</action>
</package>
<package name="b" extends="struts-default" namespace="/b">
<action name="actionB" class="actionBClass">
<result>/foo.jsp</result>
</action>
</package>
Run Code Online (Sandbox Code Playgroud) 我在struts中有一个基本问题,为什么我们需要<global-forwards>和<global-exceptions>struts-config.xml一样.如果我们能够与<action-mappings>自己达成同样的目标.
Spring在Struts + Spring + Hibernate中扮演什么角色?
我收到以下错误:
javax.servlet.jsp.JspException: Broken pipe
现在我已经看到了关于套接字异常的问题/答案,但是这个错误来自不同的包.任何帮助是极大的赞赏.
顺便说一下,我在struts web app Weblogic Node日志中看到了很多这些错误,我认为它与最终用户在页面重新加载/执行下一步之前关闭他们的Web浏览器有关(数据库事务需要相当一点时间执行,从30秒到4分钟).
如何在Struts-JSP页面中检查Empty String/Null String.
Struts标签 - 不起作用?
调用的方法:
1.Struts Action
2.服务类方法(由@Transactional注释)
3.Xfire webservice调用
包括struts(DelegatingActionProxy)和事务在内的所有东西都是用Spring配置的.
使用JPA/Hibernate完成持久化.
有时web服务会抛出一个未经检查的异常.我捕获此异常并抛出一个已检查的异常.我不希望事务回滚,因为Web服务异常会更改当前状态.我已经注释了这样的方法:
@Transactional(noRollbackFor={XFireRuntimeException.class, Exception.class})
public ActionForward callWS(Order order, ....) throws Exception
(...)
OrderResult orderResult = null;
try {
orderResult = webService.order(product, user)
} catch (XFireRuntimeException xfireRuntimeException) {
order.setFailed(true);
throw new WebServiceOrderFailed(order);
} finally {
persist(order);
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然得到这个例外:
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
Run Code Online (Sandbox Code Playgroud)
当我尝试使用junit重现此事务时,事务未标记为回滚,并且仍可以提交事务.
如何让Spring不回滚事务?
什么是MVC中的控制器?
是struts.xml或Servlet(行动类)?
Controller我们的申请中可以有多个吗?
拥有多个控制器是一种好习惯吗?
我ActionMessage通过JSP以下命令在文件中显示s :
<logic:messagesPresent message="true">
<ul id="messsages">
<html:messages id="msg" message="true">
<li><bean:write name="msg"/> </li>
</html:messages>
</ul>
</logic:messagesPresent>
Run Code Online (Sandbox Code Playgroud)
现在我想只显示选定的消息.如何指示要显示的消息?
其实我有两个ActionMessages对象 - messages和warnings.现在我想在单独的JSP页面上显示它们......显示一个页面messages和其他页面warnings.
那么如何在JSP页面中指出要显示哪些消息?
现在,我发现了一件奇怪的事情.
saveMessages(request, messages);
saveMessages(request, warnings);
Run Code Online (Sandbox Code Playgroud)
当我写上面的代码时,只有warnings工作.当我颠倒了上述两个陈述的顺序时,那只是messages起作用了.
似乎我们只能ActionMessages在请求中添加一个对象.如果它是正确的,那么如何分别在两个ActionMessages对象中显示消息.
我即将开始使用Struts 1.2的e项目.没有计划转移到另一个框架.
我想知道在表单中处理日期时的惯例是什么?
我应该创建一个Date变量并创建一个setDate(String date)转换发生的方法吗?
创建一个Date变量,setDate(Date date)并在链中的某处注册一个特殊的转换器?(不知道是否可能)
创建一个String变量,setDate(String date)并让validateActionForm bean中的方法转换/验证?
还是另一种方法?
另外,如果你有任何建议来加快这个框架的速度,我真的很感激.