小编Mar*_*tin的帖子

没有HTML5的范围样式表

我需要一种方法,我可以将CSS文件范围扩展到页面的某个部分.理论上,这个例子应该做我需要的:

<html>
<head>
</head>
<body>

    <div>
        <style scope>
            @import url("style1.css");
        </style>
        <div class="testText">Test with Style 1</div>
    </div>
    <div>
        <style scope>
            @import url("style2.css");
        </style>
        <div class="testText">Test with Style 2</div>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,我发现scope元素目前仅在某些浏览器中可用(主要是Firefox 21+).所以,我正在寻找一个懒惰的出路或问题.我需要将一些不同风格的内容集成到一个站点中.我们尝试加载两个css文件集,但是在两个样式表中都有一些样式名称,因此在一个文件集和相应的html内容中重命名样式名称会有很多工作,特别是因为你不能只使用Eclipse重构...... :)

是否有任何其他解决方案可以提供广泛兼容的结果?

问候

html css html5

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

如何过滤源路径从eclipse调用的JUNIT测试

假设我在Eclips项目中有一组源文件夹:

MyProject
  base/src/impl
  base/src/test
  common/src/api
  common/src/test
  common/src/junit
Run Code Online (Sandbox Code Playgroud)

请注意,这些不是包,它们是源文件夹,每个包内都有一个包层次结构,它们可以是相同的.假设我在base/src/impl文件夹中有一个类com.foo.myproject.DoSomething,我可能在base/src/Test文件夹中有一个名为com.foo.myproject.DoSomethingTest的Test,也许是com.foo .myproject.DoSomethingUnitTest在同一包层次结构下的另一个源文件夹中.

我需要做的是运行某些源文件夹下的所有测试.也许所有这些都在junit文件夹中,但没有来自测试文件夹.

这可以通过带有junit搜索模式的Ant工作得很好,例如:

<include name="**/src/junit" />
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够从Eclipse获得完全相同的运行配置,而无需调用Ant.由于已经有很多项目,包和数千个测试类,我正在寻找一种"懒惰"的方式来完成这项工作,这意味着,无需更改项目结构或必须保留复杂的测试套件.

我尝试过的一种方法是使用org.springframework.core.io.support.PathMatchingResourcePatternResolverClasspathSuite 使用的方法,但是在classpath中查找资源总是在一个单独的类位置查看合并的源文件夹,所以我无法在我打算这样做的级别进行过滤.

我正在寻找两种方法:

1. Filter using some TestSuite
2. Filter using some JUNIT Runner Plugin in Eclipse (is there any that can do what I need?)
Run Code Online (Sandbox Code Playgroud)

谢谢!

java eclipse junit

8
推荐指数
2
解决办法
1497
查看次数

如何在Java中声明一个Typed类?

我需要声明一个实例Map.class,但Map是键入的......所以我需要这样的东西:

Class <Map<String, String>> clazz = Map.class;
Run Code Online (Sandbox Code Playgroud)

此行导致编译错误.表达这个的干净方式是什么?

java generics

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

JBehave在第二个"和"之后将步骤标记为"待定"

所以,

我和JBehave有一种奇怪的行为.我有一个场景,我需要一个StepDef结构,如下所示:

Given some precondition
When something happens
And something else happens
And yet something else happens
And still one more thing happens
And one more
Then I expect some result
Run Code Online (Sandbox Code Playgroud)

据我所知,这是Scenario Stepdefinition的有效语法.然而,JBehave将第二个"And"中的所有内容标记为"待定".如果我改变"And"语句的顺序,它总是运行第一个"And"并从第三个开始标记"Pending".如果我这样写它就可以了:

Given some precondition
When something happens
When something else happens
When yet something else happens
When still one more thing happens
When one more
Then I expect some result
Run Code Online (Sandbox Code Playgroud)

好像我的配置限制了可以解释的连续"And"语句的数量.但是我似乎没有发现问题.我在这做错了什么?

jbehave

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

如何在Java中传递函数时定义方法签名 - 使用Hamcrest失败的JUNIT

我有以下功能:

private Person findMax(List<Person> persons,
        Function<Person, ? extends Comparable> compare) {
    return persons.stream().max(Comparator.comparing(compare)).get();
}
Run Code Online (Sandbox Code Playgroud)

我可以称之为:

Person result = findMax(people, person -> person.getAge());
Run Code Online (Sandbox Code Playgroud)

要么:

Person result = findMax(people, person -> person.getName());
Run Code Online (Sandbox Code Playgroud)

只要Person的属性是Comparable,它就适用,在这种情况下适用于Integer和String.但是,此架构会生成警告,这是恶意代码的气味:

可比较是原始类型.应参数化对泛型类型Comparable的引用

但是,我无法将比较器修复为任何东西,因为它取决于我作为参数传递的函数...

我尝试像这样修改方法:

private <T extends Comparable<T>> Person findMax(List<Person> persons,
        Function<Person, T> compare) {
    return persons.stream().max(Comparator.comparing(compare)).get();
}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试使用JUnit和Hamcrest测试该函数时:

这一行编译(使用旧的JUnit Assert模式):

assertEquals(silvester, findMax(input, person -> person.getName()));
Run Code Online (Sandbox Code Playgroud)

但是,这个不编译(类型不匹配:无法从Integer转换为Comparable>):

assertThat(findMax(input, person -> person.getAge()), equalTo(arnold));
Run Code Online (Sandbox Code Playgroud)

但是,如果我提取断言的第一个参数,它构建良好:

Person result = findMax(input, person -> person.getAge());
assertThat(result, equalTo(arnold));
Run Code Online (Sandbox Code Playgroud)

这种表示法也很好:

assertThat(findMax(input, Person::getAge), equalTo(arnold));
Run Code Online (Sandbox Code Playgroud)

这是Hamcrest,Java8还是Eclipse中的错误?或者我错过了什么?

java generics lambda junit hamcrest

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

如何在一对多关系中有效地检索数据

我遇到了一个问题,我需要运行一个Query,它应该从主表中获取一些行,并且如果主表的键存在于子表(关系一对多)中,则有一个指示符.

查询可能是这样的:

select a.index, (select count(1) from second_table b where a.index = b.index) 
from first_table a;
Run Code Online (Sandbox Code Playgroud)

这样我就可以得到我想要的结果(0 =在second_table中没有依赖记录,否则有),但我正在为从数据库中获取的每条记录运行一个子查询.我需要为至少三个类似的表得到这样一个指标,主要查询已经是至少两个表之间的一些内部联接......

我的问题是,是否有一些非常有效的方法来处理这个问题.我曾想过将记录保存在新列"first_table"中,但dbadmin不允许触发器并通过代码跟踪它是太冒险了.

解决这个问题的好方法是什么?

此查询的应用程序将用于两件事:

  1. 指示first_table中给定行的second_table中至少存在一行.它是在列表中指出它.如果第二个表中没有行,我将不会打开此指示器.
  2. 要搜索first_table中的所有行,这些行在second_table中至少有一行,或者在第二个表中没有行.

我刚发现的另一个选择:

select a.index, b.index 
from first_table a 
left join (select distinct(index) as index from second_table) b on a.index = b.index
Run Code Online (Sandbox Code Playgroud)

这样,如果b.index不存在,我将得到null(显示最终可以调整,我在这里关注查询性能).

这个问题的最终目标是为这种情况找到合适的设计方法.它经常发生,真正的应用程序是一个POS系统,以显示所有客户端,并在列表中有一个图标作为指示客户端已打开订单.

sql db2 sql-execution-plan

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

与Proxy的HTTPS连接导致SSLHandshakeException

我几天来一直在努力解决这个问题,我似乎无法找到有用的答案......

我有一些软件,每次我想与代理服务器一起使用时会导致SSLHandshakeExceptions.我已经能够使用以下代码复制该问题(这比实际应用程序简单):

    HttpsURLConnection con = (HttpsURLConnection) new URL("https://www.google.com").openConnection();
    try {
        con.connect();
    } catch(Exception e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码连接到WiFi热点(不需要代理服务器),我得到连接,一切都按预期工作:

java -cp . SampleJavaURLTest
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用代理服务器运行相同的Java命令:

java -cp . -DproxySet=true -DproxyHost={myProxyHost} -DproxyPort={myProxyPort} SampleJavaURLTest
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外(e.printStackTrace()在代码snipplet中打印出来,使行号无关:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1731)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:925)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
at …
Run Code Online (Sandbox Code Playgroud)

java ssl proxy

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

更高级版本的Collections.frequency()

所以,让我们假设我有以下列表:

List<Foo> myList = getListFromSomePlace();
int frequency = Collections.frequency(myList, someFoo);
Run Code Online (Sandbox Code Playgroud)

这将计算所有someFoo匹配元素.

但是,如果我有一个更"复杂"的版本:

List<Foo> myList = getListFromSomePlace();
int frequency = /* get number of Elements in the List whose getInternalFoo() match a certain value */
Run Code Online (Sandbox Code Playgroud)

一种方法是覆盖equalsFoo类中的方法,但我真的想避免在Foo类中放置自定义行为,特别是因为我可能希望根据Foo类中的不同属性获取频率,而我只能有一个版本的overriden equals方法.

Collections.sort这样的函数允许我传递一个自定义Comparator,它将完全按照我的需要进行操作,但Collections.frequency不提供此功能.

使用Java8,我会使用流和一些Lambda表达式来解决这个问题,但我想看看是否有一个可以与Java 7一起使用的简单解决方案.我正在寻找一些不涉及编码自定义频率的东西方法本身,但使用一些现有的API.有东西吗?

java collections

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

等效于使用自定义比较器进行流式处理

如果我有以下列表:

List<String> list = Arrays.asList("hello", "world", "hello");
Run Code Online (Sandbox Code Playgroud)

我应用以下(Java8):

list.stream().distinct().collect(Collectors.toString());
Run Code Online (Sandbox Code Playgroud)

然后我会得到一个包含“hello”和“world”的列表。

但是,就我而言,我有一个类型列表(来自外部 api),我想在其中“绕过”equals 方法,最好使用比较器,因为它没有涵盖我需要的内容。

假设这个类看起来像这样:

public class Point {
    float x;
    float y;
    //getters and setters omitted
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我希望将涵盖特定标准的两点定义为相等,例如 (30, 20) 和 (30.0001, 19.999)。

自定义比较器可以做到这一点,但我发现没有 API 可以执行 Java8 Stream 中的 distinct() 功能,而是使用比较器(或类似模式)。

有什么想法吗?我知道我可以编写这样的函数,但我更喜欢使用现有 apis 的优雅方式......我对外部库没有限制(番石榴、apache-commons 等,如果他们有一种舒适的方式,欢迎使用)我需要的)。

java collections java-stream

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

具有通用引用的树接口

我有一个我们已实现的树的问题,这是一个示例:

public interface TreeNode {
    TreeNode getParent();
    void setParent(TreeNode parent);

    List<TreeNode> getChildren();
    void setChildren(List<TreeNode> children);
}
Run Code Online (Sandbox Code Playgroud)

所以,到现在为止这很容易,但是我们有一些Tree的变体,所以我们有一些这样的接口:

public interface TreeNodeWithX extends TreeNode {
    String getX();
    void setX(String x);
}

public interface TreeNodeWithY extends TreeNode {
    Boolean getY();
    void setY(Boolean y);
}
Run Code Online (Sandbox Code Playgroud)

因此,我需要一个TreeNodeWithX对象(是的,它的实现)从其getParent方法返回一个TreeNodeWithX对象(对于TreeNode接口中的其他方法也是如此).

来自TreeNodeWithY的相同行为,getParent()应返回TreeNodeWithY.

我尝试过一些泛型方法,例如:

public interface TreeNode<T extends TreeNode> {
    T getParent();
    void setParent(T parent);

    List<T> getChildren();
    void setChildren(List<T> children);
}
Run Code Online (Sandbox Code Playgroud)

但是,在实施方法的某些时候,我总是遇到麻烦.我的问题是,我是否使用我的通用界面正确的方式或我在这里做错了什么?

这种递归泛型引用并没有真正帮助我...

java generics tree interface

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