Я хотел бы объявить выражение условного метода в EL, как показано ниже:
<p:dataTable id="#{cc.attrs.datatableId}" var="overview"
rowSelectListener="#{cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}">
Однако он выдает исключение EL:
javax.el.ELException: недопустимое выражение метода: # {cc.attrs.detailsMode == 'single'? cc.attrs.bean.onRowSelect: cc.attrs.bean.onRowUrlSelect}
Как я могу объявить условное выражение метода EL?
2 ответа
К сожалению, выражения метода не принимают выражения значений. Лучше всего иметь единую точку входа в метод, которая, в свою очередь, делегирует дополнительные методы желаемым действиям на основе detailsMode
, которые вы также передаете / устанавливаете для bean-компонента.
Например.
<h:dataTable ... rowSelectListener="#{cc.attrs.bean.onRowSelect}">
public void onRowSelect(SelectEvent event) {
if ("single".equals(detailsMode)) {
onRowSingleSelect(event);
} else {
onRowUrlSelect(event);
}
}
Учитывая, что вы на самом деле используете составной компонент, вы можете при необходимости скрыть его в компоненте поддержки, чтобы уменьшить шаблон в компоненте поддержки:
<cc:interface componentType="yourComponent">
...
<h:dataTable ... rowSelectListener="#{cc.onRowSelect}">
@FacesComponent("yourComponent")
public class YourComponent extends UINamingContainer {
public void onRowSelect(SelectEvent event) {
String methodName = "single".equals(detailsMode) ? "onRowSingleSelect" : "onRowUrlSelect";
MethodExpression method = (MethodExpression) getAttributes().get(methodName);
method.invoke(getFacesContext().getELContext(), new Object[] { event });
}
}
Вы можете попробовать
<p:dataTable id="#{cc.attrs.datatableId}" var="overview"
rowSelectListener="#{cc.attrs.bean[cc.attrs.detailsMode == 'single' ? 'onRowSelect' : 'onRowUrlSelect']}">
Для получения дополнительной информации вы можете обратиться к https: // docs. oracle.com/javaee/6/tutorial/doc/bnahu.html#bnahz
Похожие вопросы
Связанные вопросы
Новые вопросы
jsf
JSF, Jakarta Server Faces (ранее известный как JavaServer Faces) - это структура представления моделей - ведущая, обычно используемая для создания веб-приложений на основе HTML-формы. Использование стандартных компонентов и набора визуализации, представления HTML-готовки HTML могут быть определены с использованием тегов Facelets или JSP и подключены к моделированию данных и логике приложений через Bearing Beans.