这段代码:
Set<Map.Entry<String, SSGSession>> theSet = new TreeSet<Map.Entry<String, SSGSession>>(new Comparator<Map.Entry<String, SSGSession>>() {
@Override
public int compare(final Map.Entry<String, SSGSession> e1, final Map.Entry<String, SSGSession> e2) {
return e2.getValue().getStartTime().compareTo(e1.getValue().getStartTime());
}
}));
Run Code Online (Sandbox Code Playgroud)
触发Sonar中的违规行为,绊倒了具有以下描述的findbugs规则"SIC_INNER_SHOULD_BE_STATIC_ANON":
此类是内部类,但不使用其对创建它的对象的嵌入式引用.此引用使类的实例更大,并且可以保持对创建者对象的引用超过必要的时间.如果可能,该类应该成为静态内部类.由于匿名内部类不能标记为静态,因此执行此操作将需要重构内部类,以便它是一个命名的内部类.
真?这不是很挑剔吗?我是否应该在匿名内部类中重构一行方法以节省额外引用的成本?在这种情况下,它不可能长时间保持参考.
我不介意这样做,因为我们强烈执行的编码标准是"零声纳违规",但我很想在//NOSONAR这里争论一个案例,因为imho将一行方法提取到静态内部会使代码稍微变得难以神交.
java纯粹主义者的想法是什么?
我正在使用JSF 1.2.我们想编写一些selenium测试(基于xpath),但xpath似乎没有对元素id进行通配符匹配.
我们无法关闭前缀ID,因为我们在IBM Portal Server 6.1中作为portlet运行,并且我们的应用程序在关闭前缀的环境中中断.
目前我们正在使用表单的xpath
//*[substring(@id, 54)='id_distributorName']
这将匹配:
<select size="1" class="firstName" name="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" id="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" >
但是让我觉得假设JSF总是生成一个相同长度的viewId是危险的.
有一个更好的方法吗?
我们已经尝试将该name属性用于我们的输入控件,但当然JSF忽略该属性并编写它自己的name属性,其值与id匹配,大概是为了处理脚本的原因)
希望是一个简单的问题,但我的 google foo 没有让我失望 - 我有一个 maven 项目,我们在其中使用 SLF4J 和 Log4J 1.2 绑定。
我们现在想要迁移到 Log4j 2,特别是为了性能改进 - 但是,我一生都无法找到 log4j 2.0 绑定的 maven 依赖项。我在http://logging.apache.org/log4j/2.x/log4j-slf4j-impl/找到了一些注释,但没有提到任何依赖信息。
我也有点困惑,因为显然有两种方法可以将 slf4j 放在 log4j2(绑定或适配器)之上
将 slf4j 与 log4j2 绑定的正确方法是什么,如何定义 maven 依赖项?
在下面的第一个答案之后编辑添加一些代码,我遇到了异常:
线程“main”中的异常 java.lang.NoSuchMethodError: org/apache/logging/log4j/spi/AbstractLoggerWrapper.(Lorg/apache/logging/log4j/spi/AbstractLogger;Ljava/lang/String;)V 在 org.slf4j。 impl.SLF4JLogger.(SLF4JLogger.java:48)
聚甲醛:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>logging.test</groupId>
<artifactId>logtest2</artifactId>
<version>0.0.1</version>
<name>logtest2</name>
<description>logtest2</description>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j.adapters</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.0-beta3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId> …Run Code Online (Sandbox Code Playgroud) 我希望BalusC或您中的一位JSF专家可以帮助我理解JSF生命周期的各个方面,尤其是渲染。
我要努力理解的是,在渲染响应期间,将从模型中获取值并显示给用户。现在,如果存在验证错误,则不会更新模型,因此渲染器必须必须向用户显示组件树中的无效值。一切都很好,但是渲染器如何确定是从模型读取还是从组件树读取?如果来自组件树,这是否意味着如果请求通过验证并且事件处理程序在呈现之前更新模型值,这些值是否会反映给用户?
我已经阅读了很多有关jsf生命周期的信息,但是我发现其中没有什么可以深入回答我的问题。我想确切地了解这些东西是如何工作的。
我有一个使用动态表单的页面,我以编程方式创建组件树(在这个问题中没有讨论)我需要渲染的一些输入控件需要一个ajax处理程序.
xhtml片段(由<ui:include>另一个片段包含)是:
<ui:composition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://xmlns.jcp.org/jsf/passthrough">
<h:panelGroup id="id_Group1" binding="#{questionaire.group1}" layout="block"/>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
基于其他SO anwsers,我有以下bean代码:
public HtmlPanelGroup getGroup1() {
// irrelevant code omitted
HtmlSelectOneRadio selectUI = new HtmlSelectOneRadio();
AjaxBehavior valueChangeAction = (AjaxBehavior)FacesUtils.getApplication().createBehavior(AjaxBehavior.BEHAVIOR_ID);
valueChangeAction.addAjaxBehaviorListener(new ProbeQuestionListener(currentQuestion, "probeDiv" + questionNumber));
selectUI.addClientBehavior("change", valueChangeAction);
valueChangeAction.setRender(Collections.singletonList("probeDiv" + questionNumber));
// further code to customise the control, create the panel group and probe div and wire everything together omitted
}
Run Code Online (Sandbox Code Playgroud)
这正确呈现,我看到:
<input type="radio" onchange="mojarra.ab(this,event,'change',0,'probeDiv2')" value="0" id="answer_1:0" name="answer_1">
Run Code Online (Sandbox Code Playgroud)
但是,单击单选按钮会给我一个javascript控制台错误: reference error: mojarra is not defined
现在,如果我修改xhtml以包含"正常"ajax控件,例如
<ui:composition …Run Code Online (Sandbox Code Playgroud)