powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / RichFaces: Почему <rich:pickList> добавляет объекты в selection list как String?
2 сообщений из 2, страница 1 из 1
RichFaces: Почему <rich:pickList> добавляет объекты в selection list как String?
    #37764891
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All,

Пытаюсь заставить работать rich:pickList такого вида:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<rich:pickList value="#{rolesController.selectedMenuItems}" 
	var="menuItem" 
	sourceCaption="Available Menu Items" 
	targetCaption="Assigned Menu Items" 
	orderable="true" 
	switchByDblClick="true" 
	listHeight="300" listWidth="400">
        
	<f:selectItems value="#{rolesController.availableMenuItems}"/>

        <rich:column>
            <f:facet name="header">Menu</f:facet>
            #{menuItem.menu.names['en']}
        </rich:column>
        <rich:column>
            <f:facet name="header">Item</f:facet>
            #{menuItem.names['en']}
        </rich:column>						                
</rich:pickList>



При этом в бине переменные availableMenuItems и selectedMenuItems объявлены следующим образом:

Код: java
1.
2.
private List<MenuItem> availableMenuItems = null;
private List<MenuItem> selectedMenuItems = null;



Но при сабмите возникает exception:

WARNING: #{rolesController.addRole}: java.lang.ClassCastException: java.lang.String cannot be cast to rw.gov.rdb.usermgmt.MenuItem
javax.faces.FacesException: #{rolesController.addRole}: java.lang.ClassCastException: java.lang.String cannot be cast to rw.gov.rdb.usermgmt.MenuItem
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

Если сделать selectedMenuItems нетипизированными, можно обнаружить, что RF заполняет selectedMenuItems строками вида "MenuItem@1f", т.е. тупо конвертирует выбранные элементы в String.

Что я делаю не так?
...
Рейтинг: 0 / 0
RichFaces: Почему <rich:pickList> добавляет объекты в selection list как String?
    #37764901
Африканец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дурацкий вопрос был. Добавил конвертер и все заработало. Конвертер такого вида:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@FacesConverter("MenuItemConverter")
public class MenuItemConverter implements Converter{

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String s) {
		return new MenuItem( Long.parseLong(s) );
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object obj) {
		return ((MenuItem)obj).getId().toString();
	}
}
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / RichFaces: Почему <rich:pickList> добавляет объекты в selection list как String?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]