小编Rog*_*ger的帖子

Servlet 3.0需要webxml属性

尝试编译Vaadin WAR时出现此错误:

Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project testvaadin-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

我知道这个错误意味着maven无法找到我的web.xml,但在"Book of Vaadin"中它表示在UI类中使用Servlet API 3.0和Annotation时不需要web.xml@WebServlet.

我正在一个单独的配置文件中编译我的widgetset(根据指南),当我输入此配置文件时,它编译得很好.但是,当我只编译web项目时,我得到上面提到的错误.

是什么赋予了?

我是否以某种方式覆盖了maven的行为?Vaadin甚至没有创建WEB-INF目录.我想我可以创建WEB-INF文件夹并在那里保留一个"ghost"web.xml以保持maven的快乐,但这似乎不对.

我错过了什么吗?

有谁知道这个很好的解决方案?

vaadin maven-plugin maven vaadin7

49
推荐指数
1
解决办法
5万
查看次数

何时使用Servlet或@Controller

我需要清理一些事情.我一直在寻找这个问题的答案,但我似乎无法找到我的具体问题的好答案(例如,这个问题正在蚕食答案:servlet和Web服务之间的区别).

根据我的理解,有一些不同的方法可以在"面向MVC"的Web应用程序中实现"请求处理",即"控制器",其中两个是:

  1. Java特定的Servlet(例如,您通过单击new - > Servlet创建的,例如在eclipse中),用作"Controller".这一个延伸HttpServlet,并且使用类似的方法doGetdoPost等.
  2. Spring MVC注释@Controller类(是的,使用a DispatcherServlet).有了这个你使用@RequestMethod GET/ POST

现在问我的问题......

  • 你什么时候使用其中一个?
  • 使用一种方法比另一种方法有任何一般优势吗? (比如,一般推荐一种方法吗?)

[编辑]:强调关键字

java model-view-controller spring

26
推荐指数
3
解决办法
3万
查看次数

在Checkstyle中使用IntelliJ代码样式

基本上,我想从IntelliJ中导出代码样式设置(默认值很好)并在Checkstyle中使用它们.(这是针对已经设置的maven构建验证类型的东西,但我们想要使用IntelliJ的代码样式,而不是Sun或Googles)

第一步应该是导出IntelliJ代码样式.似乎说起来容易做起来难.

现在,我知道在SO和其他地方都有很多这方面的材料,但是我无法在任何地方找到代码样式的xml文件,甚至在使用"copy to project"或"save as ..."之后也找不到 IntelliJ设置代码样式对话框.

我也尝试通过IntelliJ文件菜单导出代码样式,但它只会从已更改的区域导出代码样式(例如,将标签空间从4更改为2,它只会导出代码样式的"OTHER_INDENT_OPTIONS"部分) .

我应该补充说我正在使用IDEA 14.1.4.

是否可以导出完整的IntelliJ代码样式?

intellij-idea checkstyle

11
推荐指数
1
解决办法
2458
查看次数

Tomcat没有获取正确的jar

我正在使用Eclipse Juno,Tomcat 7和Maven 3开发一个Web项目,并遇到了一个奇怪的问题.

我有一个单独的项目,我编译一些东西,我在我的Web项目中选择该jar作为依赖项.所以,最终结果是一个.war.现在,当我在Eclipse中的嵌入式Tomcat中运行此战争并点击浏览器上的刷新按钮时,Tomcat说它无法在该jar中找到路径.

在工作区WEB-INF/lib文件夹中,我找到myApplication-common-widgetset-0.0.11-20130926.124257-7.jar

wtpwebapps/myApplication/WEB-INF/lib下的Tomcat部署目录中,我看到myApplication-common-widgetset-0.0.11-SNAPSHOT.jar 奇怪的是,Tomcat lib下的文件大1kb,文件在我的工作空间中lib大约是22Mb.

我试图将工作区jar复制到Tomcat lib文件夹,一切正常,并作为魅力运行.

更新:

  • 当我mvn tomcat:run从工作区的命令行运行时,一切正常.
  • 我"重新安装"Eclipse(对开普勒,擦除所有内容,包括工作区和主文件夹)和Tomcat 7.我仍然有同样的问题.
  • 大学尝试从SVN获取我的项目并成功运行它,包括Eclipse和IntelliJ + Tomcat 7

可能发生了什么?为什么Eclipse嵌入式Tomcat无法从目标目录中获取所有内容?

eclipse tomcat maven-3 maven tomcat7

8
推荐指数
1
解决办法
347
查看次数

如何在Vaadin应用程序中使用单点登录

我有一个Vaadin 7应用程序需要使用SSO(或更好的企业登录方法?)来通过LDAP目录授权用户.我还需要使用组"角色"区分用户和他们在我的应用程序中可以访问的内容.我是登录流程和Vaadin的新手,我现在所拥有的只是我的应用程序中的一个工作登录表单,它授权用户使用我自己制作的虚假"AD类".

所以...

  • 我在哪里以及如何开始?
  • 在这种情况下,我读了一些关于portlet和Liferay的内容.是否有可能在不使用Liferay或portlet的情况下实现我的目标?
  • 有没有什么好的Vaadin插件可以帮我解决这个问题? 
  • 我可以使用Spring安全吗?(我使用xpoft SpringVaadinIntegration插件,我知道它处理角色例如)...

如果我失声,那可能是因为我.如果我知道从哪里开始,我会很乐意读到这个.请帮我把这整块混乱的小块切成小块=)  

authentication authorization spring-security vaadin single-sign-on

7
推荐指数
1
解决办法
4113
查看次数

为什么C++仍在使用stdio.h?

这可能是一个愚蠢的问题,但我无法找到我想要的答案.另外,我不确定这是一个C++问题还是VS2010问题,但我正在寻找的答案是技术POV,所以我最终在这里.

在VS2010中启动新的控制台应用程序项目时,它会自动包含stdafx.h,而stdafx.h又包含stdio.h.我发现有关stdio.h与iostream的答案或多或少:

stdio.h用于C,iostream用于C++

我不知道这是对还是错,但......

我的问题是:为什么stdio.h仍然自动包含在C++项目中?没有iostream足够吗?

c++ visual-studio-2010

6
推荐指数
1
解决办法
2639
查看次数

关闭浏览器选项卡时,如何在确认框中默认选择"取消"

我知道这个网站上有一个非常类似的问题(JavaScript:如何在确认框中默认选择"取消"?),但我觉得我没有得到一个很好的答案,因为我的前提不一样.

问题描述:我正在编写一个Web浏览器Javascript弹出窗口,该窗口应该将一些信息作为输入,用户可以在"OK"之间选择处理信息并继续处理任何内容,或者"取消"关闭窗口并返回无论如何.到现在为止还挺好.问题是有些用户按下弹出窗口右上角的"X"关闭窗口(错误或实际上相信数据已被处理)并弹出第二个对话框(您无法更改此对话框中的文本) )显示"你确定要离开这个页面吗?" - "按OK继续,或按取消停留在当前页面" - 确定/取消...现在,有些用户只需按键盘上的输入键即可,弹出窗口将关闭,所有信息都将丢失.

问题:当涉及是否关闭Internet Explorer弹出/选项卡的对话框时,是否可以或者是否有解决方法将焦点设置为"取消"而不是"确定" ?

先感谢您!=)

html javascript internet-explorer-7

5
推荐指数
1
解决办法
3912
查看次数

如何使用包装器从表中的TextField验证整数

我有一个表,我正在使用createField()来创建字段.在编辑模式下,用户可以在字段中输入文本.

此表中的一列应该只允许整数,因此我使用的是IntegerRangeValidator.

验证应该是动态的(按类型),如果输入验证为false,则应显示一个小的红色感叹号,工具提示应该说"仅允许整数!".为了能够显示这些感叹号并进行动态验证,我需要使用一个每200ms监听textChanges的包装器.

问题是TextField返回一个String,因此验证器将所有内容解释为字符串,即使用户在字段中键入了一个整数.

在Vaadin 7中 - 当在包装器中的重写textChange-method中执行验证时,如何从表内的TextField验证整数?

createField方法:

@Override
public Field<?> createField(Container container, Object itemId, Object propertyId, com.vaadin.ui.Component uiContext) {

    TextField tField = null;

    tField = (TextField) super.createField(container, itemId, propertyId, uiContext);
    tField.setBuffered(true);
    addFieldListeners(tField);

    if (propertyId.equals("age") {
        tField.setRequired(true);
        tField.setRequiredError("This field is required!");
        // tField.setConverter(new StringToIntegerConverter()); <-- I also tried this, without success
        tField.addValidator(new IntegerRangeValidator("Only Integers allowed!", 1, 150));
        @SuppressWarnings({ "unchecked", "rawtypes" })
        TableDataValidatingWrapper<TextField> wField = new TableDataValidatingWrapper(tField);
        return wField;
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

包装:

public class TableDataValidatingWrapper<T> …
Run Code Online (Sandbox Code Playgroud)

vaadin vaadin7

5
推荐指数
2
解决办法
9045
查看次数

如何让Checkstyle CustomImportOrder正确使用IntelliJ?

我正在尝试使用Checkstyle(通过maven-checkstyle-plugin)来使用Checkstyle CustomImportOrder模块检查IntelliJ导入.尽管根据IntelliJ的默认规则订购了我的导入,但Checkstyle仍然说导入顺序错误.

这是我的导入(根据IntelliJ规则(ctrl + o)排序:

import org.codehaus.jackson.JsonNode;

import javax.sql.rowset.serial.SQLOutputImpl;
import java.util.ArrayList;
import java.util.List;
Run Code Online (Sandbox Code Playgroud)

以下是Checkstyle的警告信息:

[WARNING] src\main\java\com\example\hej\EnKlass.java[5] (imports) CustomImportOrder: Import statement is in the wrong order. Should be in the 'SPECIAL_IMPORTS' group.
[WARNING] src\main\java\com\example\hej\EnKlass.java[6] (imports) CustomImportOrder: Import statement is in the wrong order. Should be in the 'STANDARD_JAVA_PACKAGE' group.
[WARNING] src\main\java\com\example\hej\EnKlass.java[7] (imports) CustomImportOrder: Import statement is in the wrong order. Should be in the 'STANDARD_JAVA_PACKAGE' group.
Run Code Online (Sandbox Code Playgroud)

这是我的checkstyle.xml CustomImportOrder规则(由Checkstyle网站推荐用于IntelliJ):

<module name="CustomImportOrder">
    <property name="customImportOrderRules" value="THIRD_PARTY_PACKAGE###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE###STATIC"/>
    <property name="specialImportsRegExp" value="^javax\."/>
    <property name="standardPackageRegExp" value="^java\."/>
    <property name="sortImportsInGroupAlphabetically" …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea checkstyle maven

5
推荐指数
2
解决办法
5300
查看次数

如何让 JAX-WS 端点接受 SOAP1.2 消息

我有一个基于 Spring Boot 的项目,它使用 CXF 来构建 SOAP Web 服务。

发送 SOAP 1.1 消息(使用 SOAPUI)工作正常,但是当我尝试发送 SOAP 1.2 消息(当然使用相同的 WSDL)时,我收到了消息"A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint"。该消息是自我解释的,但我不明白为什么我的端点不接受 1.2 消息。

我的 WSDL 包含soap12 的正确绑定和命名空间。

在我的 spring @Configuration 类中,我将它添加到 CXF 端点 bean:

    endpoint.setBindingConfig(new BindingConfiguration()
    {
        @Override
        public String getBindingId()
        {
            return SOAPBinding.SOAP12HTTP_MTOM_BINDING;
        }
    });
Run Code Online (Sandbox Code Playgroud)

那没有帮助。当我变得更加绝望时,我尝试了@BindingType@SOAPBinding注释当然不起作用,然后我尝试SaajSoapMessageFactorySoapVersion.SOAP_12. 没用。我<extension>true</extension><protocol>Xsoap1.2</protocol>在我的jaxws-maven-plugin. 失败的。

端点显然没有配置为接收 SOAP 1.2 消息。我如何实现这一目标?

soap wsdl cxf jax-ws spring-boot

4
推荐指数
1
解决办法
3984
查看次数

如何正确单元测试房产变更?

我有这个测试:

@Test
public void UpdateAllFooDatesToOneDayBeforeProvidedDate_TodaysDateAndFooDate_UpdatedDates() {
    // arrange
    List<Foo> foos = new ArrayList<Foo>();
    Date barDate = today;
    Foo foo1 = setupFoo();
    Foo foo2 = setupFoo();
    foos.add(foo1);
    foos.add(foo2);
    foo1.setValidTo(dateUtil.adjustDaysOfDate(today, 5));
    foo2.setValidTo(dateUtil.adjustDaysOfDate(today, 8));

    // act
    modifyDates.updateAllFooDatesToOneDayBeforeProvidedDate(barDate, foos);

    // assert
    assertThat(foos, hasItems(...?)); //I don't know how to assert this
}
Run Code Online (Sandbox Code Playgroud)

updateAllFooDatesToOneDayBeforeProvidedDate(Date,List)只是将所有Foos的日期属性更改为barDate之前的日期.

我正在尝试使用Hamcrest来帮助我断言列表已经更新,但我无法让它真正起作用.

我应该简单地使用foos.get(n).getDate()并断言那些?

断言foos中元素的date属性是否已正确更新的首选方法是什么?

编辑:错字

java junit unit-testing hamcrest

3
推荐指数
1
解决办法
134
查看次数

如何从其他模块获取测试资源

我想在database模块中的内存中测试中重用模块的测试资源中的sql脚本pizza,但是我无法从类路径中获取脚本.

我的目录结构如下所示:

(为简洁起见,我留下了大部分文件/目录)

|   pom.xml
|   
|           
+---database
|   |   pom.xml
|   |   
|   \---src
|       \---test
|           \---resources
|               \---db
|                   \---migration
|                       \---hsqldb
|                               V1__create_schema.sql
|                               V2__config_data.sql
|                               V3__user_data.sql
|                               
+---pizza
|   |   pom.xml
|   |   
|   \---src
|       +---main
|       |   +---java
|       |   |   \---com
|       |   |       \---example
|       |   |           +---domain
|       |   |           |       DoStuff.java
|       |   |                   
|       |   \---resources
|       |       |   applicationContext.xml
|       |               
|       \---test …
Run Code Online (Sandbox Code Playgroud)

testing maven

2
推荐指数
1
解决办法
4069
查看次数

为什么在我登录之前创建了新会话?

我创建了一个使用Spring Security(3.2)登录提示的Web应用程序.我在Tomcat 7中运行应用程序.我使用Tomcat管理器来监视会话.它是一个使用Vaadin servlet的Vaadin应用程序.没有使用JSP页面.

现在...

  1. 我有一个新开始的Tomcat,刚刚部署了.war.
  2. 我打开一个网络浏览器并输入该应用程序的网址,然后按回车键即可登陆该应用程序的登录页面.
  3. 我可以在Tomcat管理器中看到已经创建了1个会话.请注意,我还没有尝试过登录.
  4. 我关闭应用程序浏览器选项卡和浏览器本身并重新打开它(即有效删除任何会话数据)并再次输入URL并按Enter键.
  5. 我可以在Tomcat管理器中看到已经创建了另一个会话.现在总共有2个会话.请注意,我还没有尝试过登录.

这是预期的行为(防止某种会话固定攻击)还是我只是配置错误?

java session spring tomcat spring-security

1
推荐指数
1
解决办法
1866
查看次数