Значение на странице JSF не обновляется, даже если правильный метод получения

На странице JSF (скажем, page1) я щелкаю ссылку, которая вызывает всплывающее окно через JavaScript. Появляется всплывающее окно, а страница JSF1 остается в фоновом режиме.

Во всплывающем окне я работаю и работаю JSF. Когда я заканчиваю всплывающее окно, я нажимаю на кнопку во всплывающем окне, которая вызывает функцию JavaScript window.close(), чтобы закрыть ее, и метод действия кнопки обновляет значения в управляющем компоненте той же страницы1 и возвращает путь страницы page1, чтобы перенаправить меня в то же место, где я начал всплывающее окно. Так что метод getter получает хорошее значение, но моя страница1 не обновляется сразу после обновления вручную.

Оба бина (бин "вызывающий" и бин "получатель") являются SessionScoped.

РЕДАКТИРОВАТЬ

  • page1 == tests.xhtml
  • основным компонентом tests.xhtml является TestsBean
  • Я нажимаю на одну из ссылок со значением ="Test no. #{O.noGrid}
  • атрибут onclick запускает скрипт JavaScript, который вызывает всплывающее окно
  • фрагмент HTML-кода

       <tbody>
                            <ui:repeat var="o" value="#{testsBean.gridTableGeneral}"
                                varStatus="status">
                                <h:form>
                                    <h:panelGroup rendered="#{status.even}">
                                        <tr>
                                            <td class="order-table-even-row"><h:commandLink
                                                    action="#{gridPopUpBean.showGridTest()}" target="_blank"
                                                    onclick="confirmGrid('Are you sure you want to start the test no. #{o.noGrid}?');"
                                                    value="Test no. #{o.noGrid}">
                                                    <f:setPropertyActionListener value="#{o.noGrid}"
                                                        target="#{testsBean.noGridToShow}" />
                                                </h:commandLink></td>
                                            <td class="order-table-even-row">#{o.totalAccess}</td>
                                            <td class="order-table-even-row">#{o.maxPercentage} %</td>
                                            <td class="order-table-even-row"><h:commandLink
                                                    action="#{testsBean.showGridDetaildPage()}">
                                                    <img src="/juritest/resources/img/details.png"
                                                        alt="details" />
                                                </h:commandLink></td>
                                        </tr>
                                    </h:panelGroup>
                                    <h:panelGroup rendered="#{status.odd}">
                                        <tr>
                                            <td class="order-table-odd-row"><h:commandLink
                                                    action="#{gridPopUpBean.showGridTest()}" target="_blank"
                                                    onclick="confirmGrid('Are you sure you want to start the test no. #{o.noGrid}?');"
                                                    value="Test no. #{o.noGrid}">
                                                    <f:setPropertyActionListener value="#{o.noGrid}"
                                                        target="#{testsBean.noGridToShow}" />
                                                </h:commandLink></td>
                                            <td class="order-table-odd-row">#{o.totalAccess}</td>
                                            <td class="order-table-odd-row">#{o.maxPercentage} %</td>
                                            <td class="order-table-odd-row"><h:commandLink
                                                    action="#{testsBean.showGridDetaildPage()}">
                                                    <img src="/juritest/resources/img/details.png"
                                                        alt="details" />
                                                </h:commandLink></td>
                                        </tr>
                                    </h:panelGroup>
                                </h:form>
                            </ui:repeat>
    
  • и фрагменты поддерживающего бина TestBean.java этой страницы

           @ManagedBean
           @SessionScoped
           public class TestsBean implements Serializable {
    
       private static final long serialVersionUID = 1L;
    
           @EJB
       TestsManager testsManager;
    
       @ManagedProperty(value = "#{applicationContainer}")
       private ApplicationContainer container;
    
       @ManagedProperty(value = "#{accessesBean}")
       private AccessesBean accessesBean;
    
           ...
           getters / setter for the ui:repeat
    
           ...
    
      public void extractInformationFromDB(int gridCategory) {
    
    // extract from the container the right category grids
    gridList = testsManager.extractFromContainerRightCategory(container, gridCategory);
    // extract from the right grids array list the grid numbers
    setNoGrid(testsManager.setNoGrid(gridList));
    
    // extract the accesses
    accessList = accessesBean.getAccessInformation(gridCategory);
    // extract from the access array list the grid numbers
    setNoAccessGrid(accessesBean.setNoAccessGrid(accessList));
    
    setGridTableGeneral(testsManager.createGridTableGeneral(gridList,
            getNoGrid(), accessList, getNoAccessGrid()));
    

    }

  • всплывающее окно после того, как это сделано, его работа заканчивается answerResult.xhtml

          <ui:repeat var="n"
                    value="#{answerResultBean.accessWrongAnswerColumnWrapperList}">
                    <hr />
                    <h:outputText value="#{n.noQuestion}. #{n.question}" />
                    <table style="text-align: left;">
                        <tr>
                            <td>
                                <h:form>
                                    <h:graphicImage
                                        value="/resources/img/#{n.rightGridAnswerA ? 'tick' : 'x'}Small.png"
                                        alt="#{n.rightGridAnswerA ? 'right' : 'wrong'} " />
                                </h:form></td>
                            <td>
                                <h:outputText value="a) #{n.a}"
                                    style="#{n.userAnswerA ? 'font-weight:bold;' : 'font-weight:normal;'}" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <h:form>
                                    <h:graphicImage
                                        value="/resources/img/#{n.rightGridAnswerB ? 'tick' : 'x'}Small.png"
                                        alt="#{n.rightGridAnswerB ? 'right' : 'wrong'} " />
                                </h:form></td>
                            <td>
                                <h:outputText value="b) #{n.b}"
                                    style="#{n.userAnswerB ? 'font-weight:bold;' : 'font-weight:normal;'}" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <h:form>
                                    <h:graphicImage
                                        value="/resources/img/#{n.rightGridAnswerC ? 'tick' : 'x'}Small.png"
                                        alt="#{n.rightGridAnswerC ? 'right' : 'wrong'} " />
                                </h:form></td>
                            <td>
                                <h:outputText value="c) #{n.c}"
                                    style="#{n.userAnswerC ? 'font-weight:bold;' : 'font-weight:normal;'}" />
                            </td>
                        </tr>
                    </table>
                    <hr />
                </ui:repeat>
            </div>
            <div id="loginDiv">
                <h:commandButton style="text-align:left"
                    onclick="closeWindow(); return true;"
                    action="#{answerResultBean.closeButton()}" value="Close" />
            </div>
    
  • и основным компонентом этой последней страницы всплывающего окна является AnswerResult.java

     @ManagedBean
     @SessionScoped
     public class AnswerResultBean implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
    @ManagedProperty(value = "#{testsBean}")
    private TestsBean testsBean;
    
        private AccessAnswerResultWrapper accessAnswerResultWrapper;
    private ArrayList<AccessWrongAnswerColumnWrapper> accessWrongAnswerColumnWrapperList;
    
    // getter / setter START
    
    /**
     * @param testsBean The testsBean to set.
     */
    public void setTestsBean(TestsBean testsBean) {
    this.testsBean = testsBean;
     }
    

    ...

      public String closeButton() {
    
    testsBean.extractInformationFromDB(GridHelper.convertingGridCategoryFromStringToInteger(getAccessAnswerResultWrapper().getCategory()));
    return Utils.path + "/tests/tests";
    

    }

  • Я нажимаю кнопку во всплывающем окне с триггером value="Close" и событием, которое закрывает всплывающее окно, после чего выполняется метод closeButton(), выполняется метод извлечения из TestBean.java, который внутри него устанавливается атрибут, который я использую в качестве атрибута в пользовательском интерфейсе:repeat в tests.xhtml и, наконец, метод действия closeButton() перенаправляет меня в tests.xhtml, который, в свою очередь, снова вызывает вспомогательный компонент TestBean.java.

Я знаю, что это беспорядок, я знаю, что это не СУХОЙ и дизайн неисправен, но я постоянно учусь.

На последнем этапе я перенаправляю в tests.xhtml, прежде чем установить атрибут, который он использует, tests.xhtml вызывает bean-компонент, и он ДОЛЖЕН быть обновлен с новыми значениями. Но он не обновляется, только после обновления вручную.

0 ответов

Другие вопросы по тегам