У меня есть bean-компонент с методом действия с именем view () и полем типа MyObject:
@ManagedBean
@ConversationScoped
public class MyBean implements Serializable{
private @Inject Conversation conversation; //has getter and setter
private MyObject object; //has getter and setter
... other fields follow
public String view(MyObject selectedObj){
conversation.begin();
return "success";
}
public String getSomeProperty(){
return object.getProperty();
}
...other methods follow
}
На screen1.xhtml я использую простые символы p: dataTable с var = "obj" для вывода строк с помощью commandButton для просмотра объекта строки, по которой щелкает пользователь. Кнопка в каждом ряду выглядит следующим образом.
<p:commandButton action="#{myBean.view(obj)}"
ajax="false" title="View Clone" image="ui-icon ui-icon-locked"/>
Когда пользователь нажимает кнопку commandButton в одной из строк, они переносятся на страницу page2.xhtml, где отображается более подробная информация об объекте. Это работает правильно и отображает детали. Когда я нахожусь внутри метода действия view (MyObject selectedObj), я немедленно вызываю dialog.begin (), присваиваю this.obj = selectedObj, и пользователь получает page2.xhtml.
Однако, когда пользователь нажимает кнопку commandButton на странице 2, он должен снова отображаться с информацией, отличной от объекта obj, который был назначен из вызова действия view (), который произошел, когда он пришел со страницы 1, поскольку область действия была повышена до диалога. Это не происходит Поле obj имеет нулевое значение в компоненте, если область должна была предотвратить его потерю. Поэтому, когда они нажимают кнопку commandButton на странице 2, она выдает исключение нулевого указателя, когда страница пытается разрешить # {myBean.someProperty}.
Чего мне не хватает? Спасибо за любую помощь.