我创建了一个应用程序,它动态地构建一个网格或元素矩阵。当我尝试导航到另一个页面时,出现错误:
这是代码:
private HtmlInputText createCelda(String vValue, String vStyle,
String vTitle, String vId, boolean vscript, boolean isreadonly) {
// private Application application;
// FacesContext fc = FacesContext.getCurrentInstance();
// application = fc.getApplication();
// private HtmlInputText ccelda;
ccelda = new HtmlInputText();
ccelda = (HtmlInputText) application
.createComponent(HtmlInputText.COMPONENT_TYPE);
ValueExpression ve = application.getExpressionFactory()
.createValueExpression(fc.getELContext(), vValue, String.class);
// ValueExpression ve = application.getExpressionFactory()
// .createValueExpression(fc.getELContext(), vValue, Integer.class);
ccelda.setValueExpression("value", ve);
ccelda.setStyleClass(vStyle);
ccelda.setTitle(vTitle);
ccelda.setId(vId);
ccelda.setReadonly(isreadonly);
if (vscript != false) {
ccelda.setOnkeydown(";return checkGrid(event, this.id);");
ccelda.setOnchange(";return changeValue(this.id);");
ccelda.setOnclick("this.select()");
}
return ccelda;
}
用 bean 中的数据创建一行单元格的代码
public UIComponent createPanelPrincipal(int nx, int ny, UIComponent panel) {
panelCeldas = createPanel(nx, "nacionI");
for (int i = 1; i < nx + 1; i++) {
String snx = i > 9 ? String.valueOf(i) : "0" + String.valueOf(i);
ncelda = createCelda("#{myBean.totalI[" + (i - 1) + "]}",
celdaNacionIStyle, "I" + snx, "I" + snx, true, false);
panelCeldas.getChildren().add(ncelda);
}
panel.getChildren().add(panelCeldas);
return panel;
}
此代码在 tomcat 6.0.18 中完美运行
但在 Tomcat 5.0 中,我收到下一个错误:
10-nov-2010 14:56:24 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=form_composition:I15[severity=(ERROR 2), summary=(form_composition:I15: An error occurred when processing your submitted information.), detail=(form_composition:I15: An error occurred when processing your submitted information.)]
产生错误的行是:
ValueExpression ve = application.getExpressionFactory()
.createValueExpression(fc.getELContext(), vValue, String.class);
如果我只放 ccelda.setValue(myValue),效果很好,但我需要从 bean 中获取值,这就是我使用 ValueExpression 的原因。
我看不到调试这个的方法。如果有人感兴趣,我有一个独立的项目来看看它是如何工作的。