В JSF 2 Я открыл функцию inspect
которая принимает один аргумент типа java.lang.reflect.Method
и на основе этого аргумента он выполняет некоторую проверку аннотаций и возвращает true
или false
. Уловка: я хочу называть эту функцию inspect
от JSF EL, чтобы иметь возможность изменять пользовательский интерфейс согласно возвращаемому значению, но я не могу получить ссылку целевого метода, чтобы передать его как аргумент функции, поэтому я хотел бы спросите, как это сделать?Приобретать метод ссылка в JSF EL
Пример
package some.pkg;
@ManagedBean(name = "someClass")
public class SomeClass {
@MyAnnotation
public void someMethod(String arg1, Integer arg2) { /* ... */ }
}
функция JSF декларации
<function>
<function-name>inspect</function-name>
<function-class>some.pkg.Inspector</function-class>
<function-signature>boolean inspect(java.lang.reflect.Method)</function-signature>
</function>
Желаемая вызов от JSF, но не работает
<h:outputText
value="someMethod is annotated by @MyAnnotation"
rendered="#{inspect(someClass.someMethod)}"
/>
Приемлемый бы также это, но это я s менее удобный вариант
<h:outputText
value="someMethod is annotated by @MyAnnotation"
rendered="#{inspect(some.pkg.SomeClass.someMethod)}"
/>
Спасибо за попытку, но я не могу этого сделать. Я очень упростил мою актуальную проблему. Мне нужно сделать эту оценку для нескольких компонентов и методов, и она различает каждый запрос, поэтому я не могу с нетерпением оценить его для всех методов и beans, потому что может быть сотни таких методов, и мне нужно оценить только пару. Предположим, что этот подход с ленивой оценкой будет возможен, но это в значительной степени увеличит мои накладные расходы. – Gaim
Если вам нужно использовать отражение сотни раз, пока приложение запускается, вы, вероятно, зайдете в несколько проблем с дизайном. Фактическое представление должно заботиться только о его компоненте, а не о других. –
Ну, вы не вдаетесь в круг вопросов, но я могу сделать короткое разъяснение для вас. Отражение не для вызова, а только для проверки. Оценка не сто раз за запрос, а только пару раз (например, 1-5). И, наконец, это исследовательский проект адаптивных систем, поэтому в настоящее время нет оптимизации. Позже инспекция будет кэшироваться, а оценка - нет. – Gaim