我对实时初始化块应该运行的时间感到困惑.根据凯西塞拉的书:
每次创建类实例时都会运行实例初始化块
因此,根据这个问题和java的文档,考虑有两个类:父母和孩子:
实例化子类对象只创建子类类型的1个对象,但调用其所有超类的构造函数.
根据以上所述: 为什么每次实例化子类的对象时都会调用位于超类中的实例初始化块?它不像是超实例的新对象被实例化.
我正在尝试使用属性 autoUpdate 测试 p:growl 和 p:messages,但它不起作用,尽管这是一个非常简单的代码。
我的页面(primes.xhtml):
<h:head/>
<h:body>
<h:form>
<p:messages autoUpdate="true"/>
<p:commandButton action="#{dateBean.testErr}"/>
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
DateBean 类:
@ManagedBean
public class DateBean {
public String testErr(){
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("test error"));
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
每当我点击 commandButton 时,服务器都会给我以下警告:
“警告:有一些未处理的 FacesMessage,这意味着并非每个 FacesMessage 都有机会被渲染。这些未处理的 FacesMessage 是:-测试错误”
但是消息不会显示在页面中,咆哮也不显示。
我试图弄清楚如何使用JSTL使用会话,因此,我首先尝试在Jsp中设置会话属性,然后将该属性传递给同一应用程序中的另一个Jsp,然后在其中进行检索。
我设置了属性并使用调度程序来到达另一个servlet,在另一种尝试中,我使用了sendRedirect将请求转发到另一个servlet。
这是第一个Jsp(我在其中设置属性):
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:set var="session" scope="session" value="test"></c:set>
<%
response.sendRedirect("session.jsp"); // I know I could use the JSTL tag forward
%>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在另一个Jsp(“ session.jsp”)中:
<%
HttpSession s = request.getSession();
if(s.isNew())
out.print("new session " );
out.print(s.getAttribute("session"));
%>
Run Code Online (Sandbox Code Playgroud)
当我使用sendRedirect时,结果为"test",这意味着该会话不是新创建的。但是,当我使用forward(dispatcher)时,结果为"new session test"。
我不知道发生这种行为的原因,但是如果结果相反,这是有道理的。
当我遇到使用wait/notify方法的例子时,我正在查看Kathy Sierra书中的Threading章节:
class ThreadA {
public static void main(String [] args) {
ThreadB b = new ThreadB();
b.start();
synchronized(b) {
try {
System.out.println("Waiting for b to complete...");
b.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + b.total);
}
}
}
class ThreadB extends Thread {
int total;
public void run() {
synchronized(this) {
for(int i=0;i<100;i++) {
total += i;
}
notify();
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行代码总是产生相同的输出:
等待b完成......总计是:4950
我在ThreadB中修改了run()的synchronized块,添加:
System.out.println("ThreadB is executed");
Run Code Online (Sandbox Code Playgroud)
问题是:我为什么一直这样做
"等待b完成......"
之前
"执行ThreadB"
?是不是有可能在主线程之前执行线程b?
我最近了解了用于测量应用程序效率的不同方面的百分位指标(即:如 p50、p90 和 p99 延迟等。)我不确定为什么要使用 p50,就像这种指标一样有点模糊,如果您想衡量应用程序的效率,则不会提供太多信息。我认为这可能是一个广泛的问题,但是哪种百分位数最能反映您的应用程序的效率?
java ×2
inheritance ×1
jsf-2 ×1
jsp ×1
jstl ×1
metrics ×1
percentile ×1
performance ×1
primefaces ×1
scriptlet ×1