我收到这些消息:
[#| 2010-07-30T11:28:32.723 + 0000 |警告| glassfish3.0.1 | javax.faces | _ThreadID = 37; _TreadName = Thread-1; |将不可序列化的属性值设置为ViewMap :(关键字:MyBackingBean, value class:foo.bar.org.jsf.MyBackingBean)|#]
这些是否意味着我的JSF支持bean应该实现Serializable?还是他们提到了其他一些问题?
我正在寻找一种方法来提高我团队的工作效率,一种方法是缩短编译和单元测试所需的时间,打包和部署我们的Java EE应用程序,这个应用程序越来越大.
我所知道的简单解决方案是建立一台功能强大的计算机,它具有N个处理器(N~ =开发人员数量)和一个超快的磁盘系统和大量内存,并运行此计算机上的所有内容并通过X远程连接到它.它肯定比编译我们的笔记本电脑快得多,但仍然比购买每个开发人员他/她自己的超级计算机更便宜和更容易维护.
有没有其他方法可以解决这个问题?例如,我们可以在本地运行我们的IDE然后告诉它远程编译java源吗?Netbeans/Eclipse/IntelliJ /等可以这样做吗?或者是否有一个特殊的工具可以实现远程Java编译,也可以使用多个处理器?它不一定是免费/开源的.
不幸的是我们的笔记本电脑必须运行一个(公司管理的)Windows Vista,所以另一个原因是让我们使用独立的服务器计算机,最后摆脱烦人的托管环境.
编辑:总结到目前为止的答案,缩短构建时间的一种方法是单独为开发人员保留编译(因为编译应该是快速的),跳过运行单元测试和热部署(没有打包)到容器.
然后,当开发人员决定检查他/她的代码时,会触发持续集成服务器(如Hudson)来清理和构建并运行测试和打包和部署.
解决方案:我接受了Thorbjørn的答案,因为我认为这将是我最接近我计划进行的方式.虽然出于好奇,我仍然有兴趣解决原始问题(=远程Java编译)...
我可以从我的JSF2页面访问存储在支持bean中的变量,所以类似于
<h:outputText value="#{myBean.myValue}"/>
Run Code Online (Sandbox Code Playgroud)
工作,价值(这是一个int btw.)打印好.但是,当尝试在c:if和/或c:中的条件表达式中使用此值时,标记它永远不会等于任何东西......所以:
<c:if test="#{myBean.myValue == 1}">
<c:set var="myVar" value="true"/>
</c:if>
<c:choose>
<c:when test="#{myBean.myValue > 1}">
<c:set var="myVar" value="true"/>
</c:when>
</c:choose>
Run Code Online (Sandbox Code Playgroud)
甚至
#{myBean.myValue eq '1'}
Run Code Online (Sandbox Code Playgroud)
要么
#{myBean.myValue == '1'}
Run Code Online (Sandbox Code Playgroud)
永远不会评估为真,即使该值确实为1或> 1.
令人讨厌的是,比较在标签的渲染属性中起作用!所以这:
<h:outputText value="whatever" rendered="#{myBean.myValue == 1}"/>
Run Code Online (Sandbox Code Playgroud)
很好!
到底是怎么回事?
更新:
这有效:
public int getMyValue() {
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
@Column(name = "orderstatus")
public int getOrderStatus() {
return orderStatus;
}
Run Code Online (Sandbox Code Playgroud)
int的值打印正确,但1 == 1为false.
实体bean是以特殊方式处理的吗?我可以使用它们在UI上显示它们的价值吗?
UPDATE2:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
Run Code Online (Sandbox Code Playgroud)
打印java.lang.Integer.
UPDATE3:
这是完整的代码:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html …Run Code Online (Sandbox Code Playgroud) 我有一个页面可以执行某些操作,当用户单击按钮时,用户将被重定向到另一个页面并显示一条消息.这是我的代码:
public String confirm() {
FacesContext context = FacesContext.getCurrentInstance();
Flash flash = context.getExternalContext().getFlash();
flash.setKeepMessages(true);
FacesMessage msg = new FacesMessage("Succesful", "Release is confirmed!");
context.addMessage(null, msg);
return "/prot/expert/releases?faces-redirect=true";
}
Run Code Online (Sandbox Code Playgroud)
我使用ap:growl组件在"发布"页面上显示我的消息.到现在为止还挺好.
但是然后在任何后续页面上有p:growl(或者如果我转到另一个页面并返回),消息会一次又一次地显示,我无法杀死它.
我尝试过类似的东西:
<c:set target="#{flash}" property="keepMessages" value="false" />
Run Code Online (Sandbox Code Playgroud)
在具有p:growl的页面上,我尝试从支持bean等清除闪存.
该消息将被保留并重新显示.如果我删除flash.setKeepMessages(true); 从上面的代码,然后没有显示任何内容.
我究竟做错了什么?
我有一个JMS客户端,可以在收到消息时ssh到远程系统(并在那里做各种事情 - 与问题无关).数百个这样的消息可能会在很短的时间内到达,需要尽快处理.
但是,当收到消息时,某些远程系统也可能不可用,因此应将它们推迟到稍后(例如1小时左右).最好的解决方案是将消息放回队列并设置一些"延迟"值,这将告诉JMS代理不要在一小时内再次尝试传递消息.
什么不行:睡在接收线程中并在一小时后醒来.由于消息消费者池是有限的(例如,8个可用的连接),具有8个不可到达的系统将不必要地阻止整个处理,这是不可接受的.
对于这样的"延迟"值,我没有找到消息或队列本身的设置,它是否存在?
解决方法是使用第二个队列将消息存储到无法访问的系统,并单独处理这些消息.但它不是一个非常优雅的解决方案,需要额外的编程.也许有更好的方法.
我刚刚观看了Martin Odersky在Coursera上关于Scala的讲座第6周.在第5讲他说
"...... for的翻译不仅限于列表或序列,甚至是集合;
它完全基于方法map,flatMap和withFilter的存在.
这使您可以为自己的类型使用for语法 - 您只能为这些类型定义map,flatMap和withFilter."
我试图解决的问题是我们有一个批处理过程,它从几个数据库加载数据,组合数据并以某种方式导出结果.数据足够小以适应内存(来自每个源系统的几十万条记录),但足够大以至于考虑性能很重要.
我可以使用传统的内存数据库(如H2)并通过ScalaQuery或类似的方式访问它,但我真正需要的只是一种能够有效地从不同源系统搜索和连接数据的方法 - 等于SQL的索引和JOINs.使用完整的关系数据库+ Scala ORM,可以通过Scala原生的一些数据结构轻松高效地解决问题,这感觉真的很尴尬.
我的第一个天真的方法是一个Vector数据结构(用于快速直接访问)与一个或多个"索引"(可以像数据库系统一样实现为B-Trees).这个组合数据结构的map,flatMap,withFilter方法可以足够智能,如果它们有一个用于查询字段的索引,则可以使用索引 - 或者它们可以有一个"提示"来使用索引.
我只是想知道这些数据结构是否已经存在且可用,还是我需要自己实现它们?是否有Scala的库或集合框架可以解决这个问题?
如何在Lager中为每个应用程序/库设置不同的日志级别?
例如,我想在控制台上看到调试消息,但仅适用于我的应用程序,而不是我使用的任何库(例如amqp_client).
这来自Primefaces文档:
按钮图标
使用CSS和图像属性显示按钮上的图标.
<p:commandButton value=”With Icon” image=”disk”/>
<p:commandButton image=”disk”/>
Run Code Online (Sandbox Code Playgroud)
.disk是一个带有background属性的简单css类:
.disk {background-image:url('disk.png')!important; }
我的问题是:这个url()指向哪里?换句话说,我应该在哪里放置我的图像以便CSS可以访问它?
我试过/资源,/ resources/img,没有运气.是的,它使用绝对URL(包含上下文路径的URL),但这使得应用程序不可移植.
我的webapp中有这个工作代码:
<h:button value="Edit user..." outcome="/public/user" >
<f:param name="userName" value="#{authBean.authUser}"/>
</h:button>
Run Code Online (Sandbox Code Playgroud)
它能做什么:
我需要的:
这是我能得到的最接近的:
<p:commandButton value="Edit user..." action="/public/user?faces-redirect=true" ajax="false" immediate="true" >
<f:param name="userName" value="#{authBean.authUser}"/>
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
它发送一个POST,通过GET重定向到新URL.但是参数在此过程中丢失.
另一个想法:
<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml">
<f:param name="userName" value="#{authBean.authUser}"/>
</p:linkButton>
Run Code Online (Sandbox Code Playgroud)
GET请求被中止(???根据Firebug)并且当前页面再次被POST.
这样做的正确方法是什么?
更新:这是有效的(在空白页面上,没有p:dataTable):
<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml?userName=myusername">
Run Code Online (Sandbox Code Playgroud)
但这不是:
<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml?userName=myusername&secondParam=otherValue">
Run Code Online (Sandbox Code Playgroud)
后者导致:
500:javax.servlet.ServletException:Error Parsing /sample0.xhtml:Error Traced [line:14]对实体"secondParam"的引用必须以';'结尾 分隔符.
UPDATE2:&应该被转义:
<p:linkButton value="Edit user..." href="http://localhost:8080/contextpath/faces/public/user.xhtml?userName=myusername&secondParam=otherValue">
Run Code Online (Sandbox Code Playgroud)
它看起来不错......但我仍然得到GET中止和POST重新发送:
alt text http://img64.imageshack.us/img64/1017/primefaceslinkbutton.jpg
这是我一直在尝试的完整空白页面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> …Run Code Online (Sandbox Code Playgroud)