У меня есть список объектов, selectOneMenu
, в котором я хочу отобразить этот список объектов. Я не хочу отображать результат метода toString () в этом меню, и вместо этого я создал конвертер.
Проблема в том, что в h: outputText вызывается конвертер элементов, и я вижу ожидаемое значение. Но когда я присоединяю этот конвертер к h: selectOneMenu, конвертер по-прежнему вызывается при рендеринге страницы, но результат игнорируется и вместо него используется результат toString (). Как я могу это исправить?
Пример кода:
Преобразователь:
@FacesConverter(forClass=Priority.class)
public class PriorityConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
try {
InitialContext ic = new InitialContext();
PriorityEJB priorityEJB = (PriorityEJB) ic.lookup("java:global/TicketSentinel/TicketSentinel-ejb/PriorityEJB");
return priorityEJB.getPriorityByOrd(Integer.valueOf(value.charAt(0)));
} catch (NamingException ex) {
Logger.getLogger(PriorityConverter.class.getName()).log(Level.SEVERE, null, ex);
throw new ConverterException();
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Priority p = (Priority) value;
return p.getOrder() + " - " + p.getName();
}
}
Часть страницы:
<h:outputText value="Priority:" />
<h:selectOneMenu value="#{ticketController.ticket.priority}">
<f:selectItems value="#{priorityController.priorityList}" />
</h:selectOneMenu>
Контроллер EJB:
@Named(value = "priorityController")
@RequestScoped
public class PriorityController {
@EJB
private PriorityEJB priorityEJB;
public List<Priority> getPriorityList() {
return priorityEJB.getPriorities();
}
}
<ч />
Обновление:
Я посмотрел на источник страницы и нашел это:
<td><select name="j_idt18:j_idt26" size="1">
<option value="1 - Fatal">1 - - Fatal</option>
<option value="2 - Critical">2 - - Critical</option>
<option value="3 - Very Important">3 - - Very Important</option>
<option value="4 - Important">4 - - Important</option>
<option value="5 - Minor">5 - - Minor</option>
<option value="6 - Fix if time">6 - - Fix if time</option>
<option value="7 - Insignificant">7 - - Insignificant</option>
</select></td>
Так что двигатель печатает правильное значение, но не в том месте! Как сделать так, чтобы текст в атрибуте value
помещался в тело блока
?