Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring MVC还是Wicket?_Spring Mvc_Wicket - Fatal编程技术网

Spring mvc Spring MVC还是Wicket?

Spring mvc Spring MVC还是Wicket?,spring-mvc,wicket,Spring Mvc,Wicket,我对SpringMVC有一段很长的经历(到目前为止还很愉快),但最近我开始对Wicket感兴趣 我的问题也是关于如何处理(Wicket)DI、事务管理、JDBC连接和所有这些东西?可以将Springsource套件的某些部分与Wicket混合使用吗?导叶和焊接?Wicket&Guice?Wicket有效地替代了Spring MVC,但不是Spring容器本身。Wicket通过@SpringBean注释与Spring轻松集成,该注释允许您将SpringBean(服务、DAO等)直接注入页面。您不能

我对SpringMVC有一段很长的经历(到目前为止还很愉快),但最近我开始对Wicket感兴趣


我的问题也是关于如何处理(Wicket)DI、事务管理、JDBC连接和所有这些东西?可以将Springsource套件的某些部分与Wicket混合使用吗?导叶和焊接?Wicket&Guice?

Wicket有效地替代了Spring MVC,但不是Spring容器本身。Wicket通过
@SpringBean
注释与Spring轻松集成,该注释允许您将SpringBean(服务、DAO等)直接注入页面。您不能以另一种方式执行DI—这是有充分理由的

同时使用弹簧和导叶是一个明智的选择。然而,据我记忆所及,Wicket页面和组件不是由Spring容器管理的,因此您不能对它们使用
@Transactional
注释(无论如何,这是个坏主意-事务属于更深层次)


其他一切都是一样的——AOP、JDBC等。Wicket是一个表示层框架。它不会处理DI、事务或连接

但是它可以很容易地与许多框架集成,包括Spring、Guice(官方Wicket模块)和CDI/Weld(Wicket提交者之一的一个附带项目)

下面是一个带有Spring的简单Wicket应用程序。事务位是普通的老式Spring配置,所以我没有费心包括它们

HelloWorldService.java

applicationContext.xml


WicketApplication.java

公共类WicketApplication扩展了WebApplication{
@凌驾
公共void init(){
super.init();
getComponentInstanceListeners().add(新的SpringComponentInjector(this));
}
@凌驾
公共类getHomePage(){
返回主页.class;
}
}
HomePage.java

公共类主页扩展网页{
@春豆
私有HelloWorldService HelloWorldService;
公共网页(){
添加(新反馈面板(“反馈”);
添加(新链接(“链接”){
@凌驾
公共void onClick(){
info(helloWorldService.getMessage());
}
});
}
}
HomePage.html


显示消息
web.xml


org.springframework.web.context.ContextLoaderListener
小门,小门弹簧
org.apache.wicket.protocol.http.WicketFilter
应用程序类名
minimal.wicketspring.WicketApplication
小门,小门弹簧
/*

我建议完全离开Spring,试试JavaEE6+Wicket 6.x。我使用的是SpringMVC,然后是JavaEE5时代的Spring+Wicket,但JavaEE6作为中间件层完全胜过Spring解决方案

2017年更新: 有了Java7和Java8中的新功能(lambdas、方法refereces、默认接口方法实现等),JavaEE7+组合更具吸引力。尽管SpringMVC很受欢迎,可能有更好的学习曲线,但一旦你尝试Wicket,当你进入“下一个很酷的东西”(我的例子是Angular2)时,你就会错过它


注:我是红帽支付的,但以上是我的真实意见。在2011年,我会告诉你要和春天一起走。

忘了wickets吧。简单的SpringMVC、Twitter引导布局和整个spring产品组合让您能够创建可扩展的、高性能的应用程序,并具有最高的安全性。一旦你留下第一个印象并开始真正的发展,Wickets就是痛苦


希望这有助于我做出决定此演示非常有用。

我应该添加测试您的东西的功能(我发现SpringJUnit4ClassRunner对于测试spring控制器非常有用)Wicket也有一些基本的测试支持。通过单元测试很容易测试UI页面(或其部分)。只要您不想测试Ajax功能,WicketTester也会介绍JAX行为。测试普通JavaScript不是Wicket业务的一部分。正如和所指出的,两者都可以使用。就我个人而言,我很高兴使用Spring进行数据库连接,使用DAO和服务层,使用Wicket进行UI。这样就可以有一个相当干净的体系结构。实际上,如果您使用AspectJ+
@Configurable
,您可以在Wicket组件的方法上使用
@Transactional
。但是我不确定我是否推荐使用它。
public class HelloWorldService {
    private String message;
    public void setMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

  <bean id="helloWorldService" class="minimal.wicketspring.HelloWorldService">
    <property name="message" value="Hello, World!" />
  </bean>
</beans>
public class WicketApplication extends WebApplication {
    @Override
    public void init() {
        super.init();
        getComponentInstantiationListeners().add(new SpringComponentInjector(this));
    }
    @Override
    public Class<HomePage> getHomePage() {
        return HomePage.class;
    }
}
public class HomePage extends WebPage {
    @SpringBean
    private HelloWorldService helloWorldService;

    public HomePage() {
        add(new FeedbackPanel("feedback"));
        add(new Link<Void>("link") {
            @Override
            public void onClick() {
                info(helloWorldService.getMessage());
            }
        });
    }
}
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<body>
  <div wicket:id="feedback"></div>
  <a wicket:id="link">Show Message</a>
</body>
</html>
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <filter>
    <filter-name>wicket.wicket-spring</filter-name>
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
    <init-param>
      <param-name>applicationClassName</param-name>
      <param-value>minimal.wicketspring.WicketApplication</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>wicket.wicket-spring</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>