Как именно тебе это не нравится?Слишком многословно?Что ж, на самом деле нет ни вспомогательного метода, предоставляемого ни JSF API, ни Mojarra impl, который бы это скрывал.Это просто останавливается здесь.Вы должны написать это сами.
По крайней мере, в вашем фрагменте вторая if
проверка на null
является излишней, поскольку она никогда не возвращает null
.Кроме того, behaviors.keySet().contains(key)
на той же строке также может быть упрощено до behaviors.containsKey(key)
.Учитывая тот факт, что он никогда не возвращает null
, вы также можете сразу получить список поведений и вместо него проверить его на ноль.
Наконец, просто скрыть его в некотором служебном методе.
public static Set<String> getClientBehaviorRenderIds(UIComponent component, String behaviorName) {
Set<String> clientBehaviorRenderIds = new HashSet<String>();
if (component instanceof ClientBehaviorHolder) {
List<ClientBehavior> clientBehaviors = ((ClientBehaviorHolder) component).getClientBehaviors().get(behaviorName);
if (clientBehaviors != null) {
for (ClientBehavior clientBehavior : clientBehaviors) {
if (clientBehavior instanceof AjaxBehavior) {
clientBehaviorRenderIds.addAll(((AjaxBehavior) clientBehavior).getRender());
}
}
}
}
return clientBehaviorRenderIds;
}
, чтобы вы могли использовать его следующим образом:
Set<String> renderIds = getClientBehaviorRenderIds(component, "valueChange");
// ...
Если мешают вложенные проверки, вы также можете выполнять обратные проверки (так же написана Мохаррав общем, глубокое if
вложение - это действительно плохая практика):
public static Set<String> getClientBehaviorRenderIds(UIComponent component, String behaviorName) {
Set<String> clientBehaviorRenderIds = new HashSet<String>();
if (!(component instanceof ClientBehaviorHolder)) {
return clientBehaviorRenderIds;
}
List<ClientBehavior> clientBehaviors = ((ClientBehaviorHolder) component).getClientBehaviors().get(behaviorName);
if (clientBehaviors == null) {
return clientBehaviorRenderIds;
}
for (ClientBehavior clientBehavior : clientBehaviors) {
if (clientBehavior instanceof AjaxBehavior) {
clientBehaviorRenderIds.addAll(((AjaxBehavior) clientBehavior).getRender());
}
}
return clientBehaviorRenderIds;
}