【问题标题】:Error creating jsf components dynamically using Tomcat 5.0使用 Tomcat 5.0 动态创建 jsf 组件时出错
【发布时间】:2010-11-14 11:48:10
【问题描述】:

我创建了一个应用程序,它可以动态地构建一个网格或元素矩阵。当我尝试导航到另一个页面时出现错误:

这是代码:

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 的原因。

我看不到调试方法。如果有人有兴趣,我有一个独立的项目来看看它是如何工作的。

【问题讨论】:

    标签: java jsf tomcat tomcat5


    【解决方案1】:

    统一 EL(ValueExpression 和 consorts)是在 JSP 2.1 中引入的(请注意 javadoc 中介绍性文本底部的“Since”注释)。

    Tomcat 6.x 是一个 Servlet 2.5/JSP 2.1 容器,所以它支持它。

    然而,Tomcat 5.0 是一个 Servlet 2.3/JSP 1.2 容器,所以它不支持它。您最好的选择是使用(自 JSF 1.2 起已弃用)ValueBinding 和朋友。实际上,对于 Servlet 2.3/JSP 1.2,您确实必须将所有 JSF 代码编写为最高 JSF 版本 1.1,而不是 1.2。

    【讨论】:

      【解决方案2】:

      感谢您的评论。

      我和朋友用过ValueBinding,结果是一样的。

      我不知道错误到底发生在哪里。

      我已经添加了一个 jsf 生命周期,就像你在 blogspot 中一样。

      如果在第 6 阶段之前触发每个阶段。

      这里是:

      START PHASE RESTORE_VIEW 1
      END PHASE RESTORE_VIEW 1
      START PHASE APPLY_REQUEST_VALUES 2
      END PHASE APPLY_REQUEST_VALUES 2
      START PHASE PROCESS_VALIDATIONS 3
      END PHASE PROCESS_VALIDATIONS 3
      START PHASE UPDATE_MODEL_VALUES 4
      END PHASE UPDATE_MODEL_VALUES 4
      START PHASE RENDER_RESPONSE 6
      20-nov-2010 20:00:01 com.sun.faces.lifecycle.RenderResponsePhase execute
      INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
      sourceId=main:I10[severity=(ERROR 2), summary=(java.lang.ClassCastException), detail=(java.lang.ClassCastException)]
      END PHASE RENDER_RESPONSE 6
      

      如果您或任何人想看看,这是下载链接: https://docs.google.com/leaf?id=0B5-kdDLa5NdMMDYxOGQ2MWMtMWMwNS00MDFlLTkxMWQtM2EzYmZkZDgyMTgy&hl=en

      看看 Grid.java

      谢谢

      更新:

      终于成功了,

      我用过 valueBinding,奇怪的是我以前用过,但我离开了 jsf1.2 的库。现在我已经从 lib 的文件夹中删除了这个库,它可以工作了。使用其他代码,我可以指定值的类型(字符串、整数等)。现在使用 ValueBinding 它默认取值,在我的例子中是 Integer。我不知道为什么。我想是因为 Integer 是 bean 的类型。

      无论如何,谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-26
        • 2019-10-18
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        相关资源
        最近更新 更多