Вы, похоже, используете JSF 1.x с IBM Faces Client Framework. Если это JSF 1.0 или 1.1, просто выполните работу в конструкторе компонента. На самом деле нет других чистых способов.
public class ItemClick {
public ItemClick() {
// Do your job here.
}
// ...
}
Или, если вы используете JSF 1.2 в Java EE 5, вы также можете аннотировать случайный метод аннотацией @PostConstruct
. Он будет вызван сразу после построения bean-компонента, что может оказаться более полезным, если вы выполняете работу в зависимости от управляемых свойств или внедренных EJB-компонентов.
public class ItemClick {
@PostConstruct
public void init() {
// Do your job here.
}
// ...
}
Обратите внимание, что оба способа требуют, чтобы bean-объект был ограничен запросом для выполнения при каждом запросе страницы. Сессионный компонент не будет восстанавливаться при каждом запросе страницы, а только один раз при запросе первой страницы во время сеанса.
Хакерским способом было бы создать "невидимую" форму и отправить ее с помощью JavaScript.
<body onload="document.getElementById('formId:buttonId').click()">
<h:form id="formId" style="display: none;">
<h:commandButton id="buttonId" value="submit" action="#{pc_ItemClick.doAction}" />
</h:form>
...
</body>
Недостатком является то, что это приведет к обновлению страницы, что может привести к бесконечному циклу, если вы вернетесь к той же странице. Возможно, вы захотите перейти на другую страницу или добавить некоторое условие JS, которое пропускает функцию onload, когда действие уже было вызвано. Что-то вроде:
<body onload="<h:outputText value="document.getElementById('formId:buttonId').click()" rendered="#{!pc_ItemClick.didAction}" />">