JSF не может обработать метод загрузки

У меня есть страница JSF. Я хочу обновлять страницу каждый раз, когда она обновляется

Я попробовал этот код, но он не работал

  public String onload() { 

    UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
    String id = viewRoot.getViewId();

    if(previousPage!=null && previousPage.equals(id)){

    return "brcmBuildSheet?faces-redirect=true";  
    }

    previousPage = id;

    return "";
}

Поэтому я решил использовать цифры, чтобы указать, был ли он загружен.

     public String onload() { 

    if (previousViewID !=nextViewID ){  
        nextViewID=0;
         System.out.println("reload");

    return "brcmBuildSheet?faces-redirect=true";  //brcmBuildSheet?faces-redirect=true

    }

      ++nextViewID;
      System.out.println("first page");
    return "First page, but increment value for reload";

}

Это моя страница JSF

<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}" />
<f:viewAction action="#{buildsheetController.onload}" /> 
</f:metadata>

Я получил эту ошибку

JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash.  Any values stored to the flash will not be available on the next request.

Обновление: когда я устанавливаю второе возвращаемое значение в ноль, это дает мне эту ошибку

2018-07-30T14:57:52.975+0800|Severe: JSF1094: Could not decode flash data from incoming cookie value Invalid characters in decrypted value.  Processing will continue, but the flash is unavailable for this request.

1 ответ

Я обнаружил проблему с моими кодами. Мое второе возвращение не должно быть пустым оператором или нерелевантными строками. Чтобы вернуть значения для первого оператора if, но не для оператора else, я переместил возвращаемую часть в совершенно новый метод. Я также удаляю оператор return из метода onLoad.

  public void onload() {

    if (reload) {
        System.out.println("reload");
        reload = false;
        refresh();
    }

    else {
        System.out.println("first page");
        buildsheetList = getBuildsheetService().getAllBuildsheet();
        batch = null;
        title = null;
        misc = null;

      }
    }


public String refresh() {
    return "brcmBuildSheet?faces-redirect=true"; // brcmBuildSheet?faces-redirect=true

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