我在 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
,会出现如下错误。
严重:javax.el.ELException:/converter.xhtml @44,53 value="#{converterBean.toList}":在 com.primesystems.beans.ConverterBean 类型上读取“toList”时出错
我想获得更多的堆栈跟踪,但在调试器中运行,为与 tomcat 相关的附加程序添加 log4j 并用 try/catch 包围我的 bean 方法是不好的。
我试过 mojarra 版本 2.1.7 和 2.2.0-m05 都有相同的行为。
我的代码存在问题,并且在 converterBean.getToList 方法中捕获异常我能够捕获堆栈跟踪。所以我遇到的问题得到了解决。
我想在下面发表评论。下面的定位器被注入到转换器 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都需要更新。目前我已经对它们进行了编码,希望它们能够级联,但它只从 list更新。我曾尝试从类别 ajax 渲染属性中进行渲染和列出, 但随后它发送类别,旧的,而我希望它改为发出两个请求。首先从列表中填写类别。带有类别的第二个请求,从填充到列表。