2014-09-05 1 views
0

У меня есть представление (.xhtml), и этот вид содержит dataTable. Внутри этой таблицы данных есть один столбец с именем «Тип», который соответствует атрибуту «CTYPE». CTYPE хранит три типа значений: «AB», «BC» и «CD». Затем у меня есть Enum, который переводит эти значения в более подходящие строки. Ex: 'AB' -> 'My String test 1' и т. Д., Где «AB» - это ключ, а «My String test 1» - соответствующее описание (значение). Столбец упомянутой выше таблицы данных («Тип») показывает описание каждого ключа, то есть вместо «AB» он показывает «My String test 1» и так далее. Этот столбец является sorteableColumn и имеет sortKey = 'CTYPE', который сортирует столбец по типу. Проблема в том, что я хочу сортировать столбец по описанию, а не по ключу. Итак, я хочу сортировать по «My String test 1», «My String test 2» ... вместо «AB», «BC» ... Чтобы достичь этого, мой sortKey должен иметь доступ к Enum и перевести ключ в соответствующее описание. Однако мне это не удается.Доступ к Enum внутри представления xhtml

Мои .xhtml:

<p:column> 
    <f:facet name="header"> 
    <ccomponent:sortableColumn model="#{typeSearchM}" 
           controller="#{typeSearchC}" 
           label="#{msg['labels.types.type_method']}" 
           sortKey="CTYPE" /> 
    </f:facet> 
    <h:outputText value="#{msg[typeDTO.getTypesMethod()]}" /> 
</p:column> 

Мой TypeDTO.java:

public String getTypesMethod() { 
    return DestinationTypeDomain.getDescByKey(typeData.getCType()); 
} 

где DestinationTypeDomain это перечисление, который переводит ключ к описанию. Что я хотел бы, чтобы это изменить SortKey на что-то вроде:

sortKey="#{DestinationExpeditionDomain.getDescByKey(typeDTO.destinationDesc)}" 

ответ

0

Я обычно Пусть @ApplicationScoped управляемый компонент делать такие обязанности. Забудьте о жестком кодировании описания непосредственно в перечислении, это усложнит ситуацию, если в один прекрасный день вы захотите добавить многоязычную поддержку. Просто используйте оригинальную перечисление:

@ManagedBean 
@ApplicationScoped 
public class UtilsBean{ 

    public String typeDescription(Type type){ 
     switch (type){ 
      case AB: return "My String test 1"; 
      //Add every single case 
     } 
    } 

} 

Тогда вы должны использовать только там, где вы хотите, оно будет доступно для каждого просмотра из приложения:

<p:column sortBy="#{utilsBean.typeDescription(type)}"> 
    #{utilsBean.typeDescription(type)} 
</p:column> 
+0

Я сделал, как описано выше. Ваш ответ имел смысл. Когда страница загружается, все нормально (как и раньше). Однако, когда я пытаюсь сортировать столбец, таблица становится пустой, и эта ошибка появляется на консоли: «« Любые идеи, почему? – Rita

+0

Я думаю, что это может произойти из-за параметра. – Rita

+0

Вам нужно, чтобы EL 2.2 был доступен для использования параметров в выражениях EL. Посмотрите на [это] (http://stackoverflow.com/a/3284328/1199132). –

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