2013-08-16 3 views
1

Я реализую простой метод, который перебирает дерево компонентов JSF и отключает компоненты. (Таким образом, пользователь не может изменить значения). Но этот метод не работает для составных компонентов. Как я могу обнаружить составной компонент по крайней мере? Затем я могу попытаться отключить специальный атрибут.Как найти составной компонент в дереве компонентов JSF?

+0

Вы не можете определить, является ли что-то составным, поскольку единственное ограничение на составной компонент бэк-компонента составного компонента реализует «NamingContainer», но есть много других вещей, реализующих этот интерфейс. – rdcrng

+0

Пожалуйста, задайте один вопрос на вопрос. Не хамелеонизируйте существующие вопросы. Он делает ответы неполными или даже недействительными. – BalusC

+0

@BalusC Извините, но это был мой первый вопрос, и идея о безопасности появилась позже, когда я подумал об этом. Не могли бы вы восстановить свой ответ? Ваш ответ был очень полезен. – Tony

ответ

2

Класс UIComponent имеет вспомогательный метод isCompositeComponent() для этой цели.

Таким образом, это должно просто сделать:

for (UIComponent child : component.getChildren()) { 
    if (UIComponent.isCompositeComponent(child)) { 
     // It's a composite child! 
    } 
} 

Для заинтересованного в "под одеялом" выработки, вот источник реализации кода из Mojarra 2.1.25:

public static boolean isCompositeComponent(UIComponent component) { 

    if (component == null) { 
     throw new NullPointerException(); 
    } 
    boolean result = false; 
    if (null != component.isCompositeComponent) { 
     result = component.isCompositeComponent.booleanValue(); 
    } else { 
     result = component.isCompositeComponent = 
       (component.getAttributes().containsKey(
          Resource.COMPONENT_RESOURCE_KEY)); 
    } 
    return result; 

} 

Таким образом, это определяется наличием атрибута компонента с именем, определяемым Resource.COMPONENT_RESOURCE_KEY, который имеет значение "javax.faces.application.Resource.ComponentResource".

+0

Благодарим за помощь! Но теперь я думаю о проблемах безопасности. Я отредактировал мой вопрос. – Tony

+0

Ссылка на мой вопрос безопасности [Проблемы безопасности JSF. Отключенный атрибут на стороне сервера] (http://stackoverflow.com/questions/18274010/security-issues-jsf-disabled-attribute-on-server-side) – Tony

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

  • Нет связанных вопросов^_^