我在Tomcat中运行一个JSF应用程序。它有3个列表,它们由render
属性链接。
<h:selectOneMenu id="selectedCategory" value="#{converterBean.selectedCategory}">
<f:ajax execute="selectedCategory" render="selectedFrom"/>
<f:selectItems value="#{converterBean.categories}"/>
</h:selectOneMenu>
<h:selectOneListbox id="selectedFrom" value="#{converterBean.selectedFrom}" size="5">
<f:selectItems value="#{converterBean.fromList}"/>
<f:ajax execute="selectedCategory selectedFrom" render="selectedTo"/>
</h:selectOneListbox>
<h:selectOneListbox id="selectedTo" value="#{converterBean.selectedTo}" size="5">
<f:selectItems value="#{converterBean.toList}"/>
</h:selectOneListbox>
当我点击selectedCategory
时,它会让selectedFrom
很好。当我在selectedFrom
中选择项目时,会出现如下错误。
SEVERE:javax.el.ELException:/converter.xhtml @ 44,53 value =“#{converterBean.toList}”:在com.primesystems.beans.ConverterBean类型上读取'toList'时出错
我想获得更多的堆栈跟踪但是在调试器中运行,为tomcat相关的appender添加log4j并使用try / catch包围我的bean方法是不行的。
我试过mojarra版本2.1.7和2.2.0-m05都有相同的行为。
我的代码出现问题并且在converterBean.getToList方法中捕获异常我能够捕获堆栈跟踪。所以我遇到的问题已经解决了。
我想在下面发表评论。下面的locater注入到转换器bean中,由于Conveter类不可序列化,我添加了如下逻辑,因为我有时会看到与序列化有关的异常。
@ManagedBean(name="serviceLocater")
@ApplicationScoped
public class LocalServiceLocater implements ServiceLocater, Serializable {
transient private Converter converter;
public LocalServiceLocater() {
converter = new Converter();
}
public Converter getConverter() {
// TODO Auto-generated method stub
return converter;
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
converter = new Converter();
}
}
我还想再提一个问题。当我选择 category 时, from list 和 to list 都需要更新。目前我已经对它们进行了编码,希望它们级联,但它只更新 from list 。我尝试在类别ajax渲染属性中同时渲染 和列表,但随后它发送类别,旧的虽然我希望它代替两个请求。首先使用 category 来填充列表。带有类别的第二个请求,从填充到列表。