2010-11-14 2 views
0

Я создал приложение, которое построит сетку или матрицу элементов динамически. При попытке перейти на другую страницу, я получаю сообщение об ошибке:Ошибка при создании компонентов jsf динамически с помощью Tomcat 5.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; 
} 

КОД создать ряд ячеек с данными из фасоли

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; 

} 

Этот код отлично работает в коте 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), отлично работает, но мне нужно, чтобы получить значение из фасоли, что причина, я использую ValueExpression.

Я не вижу способа отладить это. Если кто-то заинтересован, у меня есть отдельный проект, чтобы увидеть, как он работает.

ответ

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 и друзей. На самом деле, для Servlet 2.3/JSP 1.2 вам действительно нужно написать весь ваш JSF-код как на самом высоком JSF версии 1.1, а не как 1.2.

0

Спасибо за ваш комментарий.

Я использовал 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

Take a. Посмотрите на Grid.java

Thanks

Обновлено:

Наконец он работает,

я использовал valueBinding, curiosly я использовал раньше, но я оставил библиотеки для jsf1.2. Теперь я исключил эти библиотеки из папки lib, и она работает.С другим кодом у меня была возможность указать тип значения (String, Integer и т. Д.). Теперь с ValueBinding он принимает значение по умолчанию, в моем случае Integer. Я не знаю почему. Я полагаю, что Integer - это тип компонента.

В любом случае, спасибо

Смежные вопросы