0

要素のグリッドまたはマトリックスをダイナミックに構築するアプリケーションを作成しました。別のページに移動しようとすると、次のエラーが表示されます。

これはコードです:

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 からのデータでセルの行を作成する CODE

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 を使用します。

これをデバッグする方法がわかりません。誰かが興味を持っている場合は、それがどのように機能するかを確認するためのスタンドアロン プロジェクトがあります。

4

2 に答える 2

2

統合 EL (ValueExpressionおよびコンソート) は JSP 2.1 で導入されました (javadoc の紹介テキストの下部にある「以来」の注に注意してください)。

Tomcat 6.x は Servlet 2.5/JSP 2.1 コンテナーなので、それをサポートします。

ただし、Tomcat 5.0 は Servlet 2.3/JSP 1.2 コンテナーであるため、サポートしていません。あなたの最善の策は、(JSF 1.2の時点で非推奨)ValueBindingと友人を使用することです。実際、サーブレット 2.3/JSP 1.2 では、すべての JSF コードを 1.2 ではなく、最高の JSF バージョン 1.1 として記述する必要があります。

于 2010-11-14T12:18:19.433 に答える
0

ご意見をありがとうございます。

ValueBinding とその友人を使用しましたが、結果は同じです。

エラーがどこで発生するのか正確にはわかりません。

ブログスポットにあるように、jsf ライフサイクルを追加しました。

発射された場合、フェーズ 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

あなたまたは誰かが見たい場合は、これをダウンロードするためのリンクです :

Grid.java を見てください。

ありがとう

更新しました:

最後にそれは機能します、

不思議なことに以前に使用していたvalueBindingを使用しましたが、jsf1.2のライブラリを残しました。これで、このライブラリを lib のフォルダーから削除したところ、動作するようになりました。他のコードでは、値のタイプ (文字列、整数など) を指定する可能性がありました。現在、ValueBinding を使用すると、デフォルトで値が取得されます。私の場合は Integer です。どうしてか分かりません。Integer が Bean の型だからだと思います。

とりあえずありがとう

于 2010-11-20T20:16:08.873 に答える