JSF ViewState потерян - PullRequest
       4

JSF ViewState потерян

0 голосов
/ 07 мая 2019

Обновление в конце ниже .

У меня есть веб-приложение на основе JSF, в котором некоторые страницы отображаются частично пустыми. Кажется, что в некоторых случаях на странице отсутствует информация ViewState. Хотя я не знаю почему.

В этом приложении мы используем шаблон для наших страниц (здесь упрощенно):

<h:body>

<div id="header">
    <ui:insert name="header">
        <ui:include src="/pages/common/header.xhtml" />
    </ui:insert>
</div>


<div id="nav-bar">
    <ui:insert name="nav-bar">
        <ui:include src="/pages/common/navbar.xhtml"></ui:include>
    </ui:insert>
</div>

<div id="breadcrumbs">
    <ui:insert name="breadcrumbs">
        <ui:include src="/pages/common/breadcrumbs.xhtml"></ui:include>
    </ui:insert>
</div>

<div id="content">
    <ui:insert name="content">
    </ui:insert>
</div>

<div id="footer">
    <ui:insert name="footer">
        <ui:include src="/pages/common/footer.xhtml" />
    </ui:insert>
</div>

Из того, что я вижу в HTML из браузера, отображается заголовок и Navbar, но все остальное отсутствует.

Код Навбара:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html">
<body>
    <ui:composition>

    <div>
        <ui:param name="view" value="#{facesContext.viewRoot.viewId}" />    

    <h:form>
    <ul class="nav nav-pills">
        <li id="home" class="#{view == '/pages/home.xhtml' ? 'active' : ''}"><a jsfc="h:link" outcome="/pages/home.xhtml">Home</a></li>
        <li id="search" class="#{view == '/pages/search.xhtml' ? 'active' : ''}"><a jsfc="h:link" outcome="/pages/search">Search</a></li>
        <!-- other LI's like above -->
    </ul>
    </h:form>
    </div>

</ui:composition>
</body>
</html>

В отображаемом HTML я вижу div и форму nav-bar ....

<html>

<!-- above this looks fine -->
<div>
<form id="j_id_q" name="j_id_q" method="post" action="http://mysever.com/viewPage.xhtml" enctype="application/x-www-form-urlencoded">
    <ul class="nav nav-pills">
        <li id="home" class=""><a href="http://myserver.com/faces/pages/home.xhtml">Home</a></li>
        <!-- other LI tags -->
    </ul>
<input type="hidden" name="j_id_q_SUBMIT" value="1">
</form>
</div> 

Сравнивая это с рабочей страницей, рабочая страница имеет скрытый ввод ViewState:

<input type="hidden" name="j_id_q_SUBMIT" value="1"><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="srDkVocvtTYI ..."></form>

рабочая страница корректно отображает остальную часть страницы.

Таким образом, пустые страницы не имеют этой информации ViewState.

Я не уверен, почему отсутствует ViewState?

К сожалению (для отладки), только несколько пользователей системы сообщили об этой проблеме. Я предполагаю, что большинство пользователей не имеют эту проблему. Пока я просматривал журналы Tomcat, мне ничего не выделялось и ошибок не было.

Мы используем JSF (Myfaces) 2.1.11, PrimeFaces 6.2, Spring 4.3.18.

У кого-нибудь есть мысли о том, в чем может быть проблема? Или где еще я могу посмотреть в коде? Я не настолько знаком с тем, как ViewState работает в JSF, как мне нужно: (

заранее спасибо за любую помощь !!

Обновление

Я наткнулся на пару сообщений о методе сохранения состояния JSF, который заставил меня более внимательно посмотреть на нашу конфигурацию. И мы используем Client в качестве State_Saving_Method вместо Server по умолчанию. Я не уверен, почему мы сделали это изменение некоторое время назад.

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

Есть ли у кого-нибудь какие-нибудь мысли по этому поводу или они согласны (подтвердят) мое понимание?

Еще раз спасибо!

Chris

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