Условно передать действие бэк-бина в файл тега Facelet
В моем проекте JSF 2.1 у меня есть пользовательский файл тега facelet, который определяет actionListener с использованием решения, предоставленного в разделе Передача действия bean-компонента в файл тега Facelet.
Проблема в том, что я хотел бы иметь возможность не использовать actionListener при использовании тега, и это решение делает атрибут action обязательным. Я бы предпочел не создавать две версии тега (с и без actionListener) только для этого, потому что код относительно велик, и это может создать некоторые проблемы с обслуживанием.
Что я должен сделать, чтобы условно добавить actionListener в реализацию тега, без Java-кодирования (если это вообще возможно)?
1 ответ
Вы не можете использовать условные выражения EL в атрибуте action, более подробно вы можете посмотреть на этот вопрос
Я не знаю, когда вы хотите (по событию) выполнить метод actionListener, но вы можете изменить actionListener для тега a4j:support и попробовать следующий код
Вы можете вызвать функцию js для логики условия или просто сохранить условие в параметре (в зависимости от сложности логики)
<ui:param name="parameter" value="#{bean.parameterValue}/>
<h:inputText>
<a4j:support event="onchange" onsubmit="if(checkCondition(parameter))){return true;}" actionListener="#{bean.yourMethod()}"/>
</h:inputText>
function checkCondition(parameter){
//your logic
}
Надеюсь, поможет