Запустите метод на странице загрузки JSP - PullRequest
1 голос
/ 05 января 2012

У меня есть страница JSP с именем "home.jsp". И у меня есть метод с именем "getRunHomeDisplay".

Изначально у меня есть кнопка в home.jsp, так что, когда я нажимаю на кнопку, она отображает все элементы в доме.

Это кнопка вызова:

    try {
            log("Account selected: ");
            (new action.ItemShowAction()).execute(getgetRunHomeDisplay());
            }  catch (Exception e) {

            return "error";
            }
            return "success";

Это мой источник "home.jsp":

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <%-- jsf:pagecode language="java" location="/src/pagecode/Itemtest2.java" --%>                            <%-- /jsf:pagecode --%><%@page
language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://www.ibm.com/jsf/html_extended" prefix="hx"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
 <html>
 <head>
  <title>itemtest2</title>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <link rel="stylesheet" type="text/css" title="Style"
href="theme/stylesheet.css">
  <script type="text/javascript">
 </script></head>
<script type="text/javascript">

</script>
<f:view>
<body onload="#{pc_ItemClick.doButton1Action}">
<hx:scriptCollector id="scriptCollector1">
    <h:form styleClass="form" id="form1">
        <hx:commandExButton type="submit" value="Submit"
            styleClass="commandExButton" id="button1"
            action="#{pc_ItemClick.doButton1Action}"></hx:commandExButton>
        <hx:dataTableEx id="item1" value="#{itemtest.item}" var="varitem"
            styleClass="dataTableEx" headerClass="headerClass"
            footerClass="footerClass" rowClasses="rowClass1, rowClass2"
            columnClasses="columnClass1" border="0" cellpadding="2"
            cellspacing="0">
            <hx:columnEx id="item2column">
                <f:facet name="header">
                    <h:outputText styleClass="outputText" value="Item" id="item2text"></h:outputText>
                </f:facet>
                <h:outputText styleClass="outputText" id="item2" value="#{varitem}">
                </h:outputText>
            </hx:columnEx>
        </hx:dataTableEx>```1
    </h:form>
</hx:scriptCollector>
</body>
</f:view>
</html>

Как мне вызвать этот метод для загрузки страницы вместо нажатия на кнопку?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Вы, похоже, используете 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}" />">
0 голосов
/ 05 января 2012

Я считаю, что у вас есть ManagedBean, привязанный к этой странице JSP.Если это правда, я думаю, вы можете воспользоваться аннотацией @PostConstruct.Это будет примерно так:

@ManagedBean
@RequestScoped
public class MrBean{
   @PostConstruct
   public void prepareView() {
      // do what you need to do
   }
}

Эта prepareView функция всегда будет вызываться при запросе страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...