2014-02-07 3 views
0

У меня есть DataTable, как следующийNon-Аякса метод дает тот же результат в ViewScoped управляемый компонент

<p:dataTable value="#{userTable.tempLists}" var="user" 
    sortBy="#{user.userId}" sortOrder="descending"  
    paginator="true" 
    rows="10" paginatorPosition="bottom">   
    <p:column headerText="User ID" sortBy="#{user.userId}"> 
     <p:commandLink ajax="false" value="#{user.userId}" action="#{userTable.showDetails(user.userId)}"/> 
    </p:column> 
    <p:column headerText="User Name" sortBy="#{user.userName}"> 
     <h:outputText value="#{user.userName}"> 
     </h:outputText> 
    </p:column> 
</p:dataTable> 

И у меня есть имя панели, как детали, как следующие

<p:panel> 
     <h:outputText value="#{userTable.userId}"/> 
     <h:outputText value="#{userTable.userName}"/> 
</p:panel> 

Мой UserTable управляемый компонент вид область видимости. Функциональность похожа, когда пользователь нажимает на commandLink, что мой метод получит информацию о пользователе. После получения данных dataTable будет скрываться, и панель будет показана. Для пользователя это почти похоже на другую страницу.

Проблема заключается в том, что когда пользователь нажмет на любой пользовательский интерфейс (commandLink), он получит подробные сведения. Затем он может использовать кнопку возврата в браузере и попытаться получить информацию, нажав другой userId. Но в этом случае пользователь получает тот же результат, что и предыдущий. И ничего нет в журнале ошибок.

Я нашел где-то, что в режиме видимости области видимости эта проблема существует с помощью метода действий, отличного от ajax. Но мне нужно держать его в viewcoped для поддержания состояния таблицы с сортировкой и разбиением на страницы. Поэтому всякий раз, когда пользователь нажимает кнопку «Назад», я могу показать один и тот же экран перед выбором.

Пожалуйста, помогите. Заранее спасибо.

+0

Я запутался о вашем потоке: вы хотите, чтобы пользователь, чтобы остаться на той же странице, просто показать различные элементы на нем? Как насчет наличия 'f: viewParam name =" userId "', который, когда пустой показывает таблицу, и загружает пользовательский объект, если нет (используйте, например, 'f: viewAction'). – mabi

+0

@mabi Да, вы правы в реализации. Но f: viewParam используется для установки значений в url для запроса запроса. Хотя в моем случае у меня есть запрос на отправку по командной ссылке. –

+0

И вы хотите, чтобы он остался таким? Потому что, если вы разрешаете обратную навигацию, это положение в URL-адресе является хорошей идеей. – mabi

ответ

0

Задняя кнопка на клавиатуре действительно не вызывает новый HTTP-запрос. Угадайте, что это происходит не так. Фактически beter использует страницу списка и деталей. Я уже несколько часов борюсь с той же ошибкой.

См: Difference between jsf actionListener(param) and propertyListener when using back button on keyboard

+0

это не работает для меня :( –

+0

У меня есть другие поля, которые обрабатывают частичный запрос (ajax). После того, как браузер вернулся, эти компоненты перестают работать. Все это происходит после того, как метод действия не-ajax, а затем и браузер. –

+0

Не могли бы вы объяснить это в подробно с кодом? Трудно понять, что не так по тексту. – GregD