Вид не может быть восстановлен. Jsf spring boot / La vue n'a pas pu être restaurée [duplicate]

Если R будет точно соответствовать S4, было бы достаточно:

  setMethod («+», подпись (e1 = «character», e2 = «character»), функция  (e1, e2) {paste (e1, e2, sep = "")})  

Но это дает ошибку, что метод запечатан: ((Надеюсь, это изменится в функциональные версии R.

Лучшее, что вы можете сделать, это определить новую строку класса, которая будет вести себя точно так же, как класс «character»:

  setClass ("string"  , содержит = "символ") string & lt; - function (obj) new ("string", as.character (obj))  

и определяет наиболее общий метод, который позволяет R: [ ! d7]

  setMethod ("+", подпись (e1 = "character", e2 = "ANY"), строка функции (e1, e2) (вставить (e1, as.character (e2), sep  = "")))  

теперь попробуйте:

  tt & lt; - string (44444) tt # Объект класса "string" # [1  ] "44444" tt + 3434 # [1] "444443434" "sfds" + tt # [1] "sfds44444" tt + tt # [1] "4444444444" 343 + tt #Error в 343 + tt: нечисловой аргумент  до b  inary operator "sdfs" + tt + "dfsd" # Объект класса "string" # [1] "sdfs44444dfsd"  
147
задан BalusC 14 November 2013 в 14:32
поделиться

10 ответов

311
ответ дан Community 15 August 2018 в 19:15
поделиться

Вы пытались добавить строки ниже к своему web.xml?

<context-param>
   <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
   <param-value>true</param-value>
</context-param>

Я нашел, что это очень эффективно, когда я столкнулся с этой проблемой.

49
ответ дан Apurv 15 August 2018 в 19:15
поделиться
  • 1
    это сработало и для меня. Спасибо за ответ. Какова цель этого? – MartK 17 May 2012 в 11:56
  • 2
    Не помните точно, но я нашел это решение на веб-сайте ICEFaces. – Mike GH 22 May 2012 в 13:18
  • 3
    я могу немного опоздать на вечеринку, но это сработало и для меня. благодаря! – stellarossa 10 September 2013 в 13:13
  • 4
    Является ли это определено только для JSF 1.2 или JSF 2? – SRy 1 October 2013 в 17:16
  • 5
    Это прекратит бросать исключение, когда время истечения срока действия и просто продолжит запрос, но JSF по-прежнему не сможет восстановить состояние представления или не найти какие-либо связанные с ним компоненты. Эта транзакция будет вести себя как безстоящий JSF, и вам нужно будет восстановить состояние представления самостоятельно на основе параметров запроса POST, чтобы избежать «wtf? & Quot; опыт конечного пользователя при обработке формы submit ответил неожиданно. Если вы хотите применить это только на определенных страницах JSF, скорее используйте OmniFaces <o:enableRestorableView> вместо контекстного параметра приложения. – BalusC 13 August 2015 в 07:16

Добавьте эту строку в свой web.xml. Это работает для меня

<context-param>
        <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name> 
        <param-value>true</param-value>     
    </context-param>
-2
ответ дан harshal 15 August 2018 в 19:15
поделиться
  • 1
    Ваш ответ будет более полезен, если вы включите объяснение и контекст о том, что делает код. – Palpatim 13 June 2014 в 16:38
  • 2
    Даже если это правильный ответ, StackOverflow отлаживает такие ответы без объяснения причин. Было бы полезно сообществу добавить дополнительную информацию о том, почему это работает. – RacerNerd 13 June 2014 в 16:39

Я сам столкнулся с этой проблемой и понял, что это связано с побочным эффектом фильтра, который я создал, который фильтрует все запросы на аппликацию. Как только я изменил фильтр, чтобы выбрать только определенные запросы, эта проблема не возникала. Может быть, хорошо проверить такие фильтры в вашем приложении и посмотреть, как они себя ведут.

-2
ответ дан javshak 15 August 2018 в 19:15
поделиться

Я добавлю следующую конфигурацию в web.xml, и она была решена.

<context-param>
    <param-name>com.sun.faces.numberOfViewsInSession</param-name>
    <param-value>500</param-value>
</context-param>
<context-param>
    <param-name>com.sun.faces.numberOfLogicalViews</param-name>
    <param-value>500</param-value>
</context-param>
-3
ответ дан Mohamed Ali 15 August 2018 в 19:15
поделиться
  • 1
    Ужасный совет. Только делайте это, когда у вас много памяти, и у ваших конечных пользователей действительно есть до 500 вкладок браузера, и нажмите кнопку возврата в браузере до 500 раз до предыдущих синхронных обратных передач. – BalusC 13 August 2015 в 07:11

Вы можете использовать свой собственный обработчик исключений Ajax или perffaces-extensions

Обновить ваши faces-config.xml

...
<factory>
  <exception-handler-factory>org.primefaces.extensions.component.ajaxerrorhandler.AjaxExceptionHandlerFactory</exception-handler-factory>
</factory>
...

Добавить следующий код на странице jsf

...
<pe:ajaxErrorHandler />
...
0
ответ дан myset 15 August 2018 в 19:15
поделиться

Я получал эту ошибку: javax.faces.application.ViewExpiredException.Когда я использую разные запросы, я обнаружил тех, у кого есть тот же JsessionId, даже после перезапуска сервера. Так что это связано с кешем браузера. Просто закройте браузер и попробуйте, он будет работать.

0
ответ дан rahul 15 August 2018 в 19:15
поделиться
  • 1
    Это уже покрывается текущим верхним ответом. – BalusC 13 August 2015 в 07:13

Когда наша страница простаивает в течение x времени, срок действия представления истекает, и бросает javax.faces.application.ViewExpiredException, чтобы это не происходило, одним из решений является создание CustomViewHandler, который расширяет ViewHandler и переопределяет метод restoreView. Все остальные методы делегирован родителям

import java.io.IOException;
import javax.faces.FacesException;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

public class CustomViewHandler extends ViewHandler {
    private ViewHandler parent;

    public CustomViewHandler(ViewHandler parent) {
        //System.out.println("CustomViewHandler.CustomViewHandler():Parent View Handler:"+parent.getClass());
        this.parent = parent;
    }

    @Override 
    public UIViewRoot restoreView(FacesContext facesContext, String viewId) {
    /**
     * {@link javax.faces.application.ViewExpiredException}. This happens only  when we try to logout from timed out pages.
     */
        UIViewRoot root = null;
        root = parent.restoreView(facesContext, viewId);
        if(root == null) {
            root = createView(facesContext, viewId);
        }
        return root;
    }

    @Override
    public Locale calculateLocale(FacesContext facesContext) {
        return parent.calculateLocale(facesContext);
    }

    @Override
    public String calculateRenderKitId(FacesContext facesContext) {
        String renderKitId = parent.calculateRenderKitId(facesContext);
        //System.out.println("CustomViewHandler.calculateRenderKitId():RenderKitId: "+renderKitId);
        return renderKitId;
    }

    @Override
    public UIViewRoot createView(FacesContext facesContext, String viewId) {
        return parent.createView(facesContext, viewId);
    }

    @Override
    public String getActionURL(FacesContext facesContext, String actionId) {
        return parent.getActionURL(facesContext, actionId);
    }

    @Override
    public String getResourceURL(FacesContext facesContext, String resId) {
        return parent.getResourceURL(facesContext, resId);
    }

    @Override
    public void renderView(FacesContext facesContext, UIViewRoot viewId) throws IOException, FacesException {
        parent.renderView(facesContext, viewId);
    }

    @Override
    public void writeState(FacesContext facesContext) throws IOException {
        parent.writeState(facesContext);
    }

    public ViewHandler getParent() {
        return parent;
    }

}   

Затем вам нужно добавить его в ваши faces-config.xml

<application>
    <view-handler>com.demo.CustomViewHandler</view-handler>
</application>

Спасибо за исходный ответ по ссылке ниже: http://www.gregbugaj.com/?p=164

0
ответ дан ROMANIA_engineer 15 August 2018 в 19:15
поделиться
  • 1
    Этот подход не восстанавливает видимые бобы. – BalusC 21 May 2015 в 21:21

Избегайте многочастных форм в Richfaces:

<h:form enctype="multipart/form-data">
    <a4j:poll id="poll" interval="10000"/>
</h:form>

Если вы используете Richfaces, я обнаружил, что запросы ajax внутри многочастных форм возвращают новый идентификатор просмотра по каждому запросу.

Как отлаживать:

При каждом запросе ajax возвращается идентификатор вида, это нормально, если идентификатор просмотра всегда один и тот же. Если вы получаете новый идентификатор просмотра по каждому запросу, тогда возникает проблема и его необходимо устранить.

3
ответ дан tak3shi 15 August 2018 в 19:15
поделиться

Сначала, что вам нужно сделать, прежде чем менять web.xml, убедитесь, что ваш ManagedBean implements Serializable:

@ManagedBean
@ViewScoped
public class Login implements Serializable {
}

Особенно, если вы используете MyFaces

5
ответ дан ZuzEL 15 August 2018 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: