2012-11-20 3 views
1

я иметь следующую структуру:Как переносить объект из одного jsf-представления в другой?

listView.xhtml

<h:dataTable value="#{listBean.myList} ...> 
    //for every row I create a commandLink 
    <h:commandLink action="editView" value="edit" /> 
</h:dataTable> 

ListBean.java

@ManagedBean 
@ViewScoped 
public class ListBean{ 
    public List<Entity> myList; // also getters and setters 
} 

editView.xhtml

<h:inputText value="#{editBean.selectedEntity.name}" /> 

EditBean.java

@ManagedBean 
@ViewScoped 
public class EditBean{ 
    public Entity selectedEntity; // also getters and setters 
} 

Вы знаете, вопрос: Как я могу транспортировать выбранный объект из ListView в editView? Это должно быть очень просто, я думал, но после целого дня, я не получил его работу.

Я пробовал разные вещи, как @ManagedProperty и <f:param name="" value="">, но я не помочь мне. Итак, пожалуйста, покажите мне, насколько простым и приятным это может быть :)

Заранее спасибо!


UPDATE - Решение # 1

Благодаря Даниилу, возможный путь, который работает является, когда объект удерживается с помощью EntityManager, так что вы можете получить доступ к сущности его идентификатору , Таким образом, вы передадите идентификатор в качестве параметра запроса. Здесь мы идем:

listView.xhtml

<h:dataTable value="#{listBean.myList} ...> 
    //for every row I create a commandLink, so you can click on that entity to edit it 
    <h:commandLink action="editView" value="edit"> 
    <f:param name="selectedEntityId" value="#{entity.id}" /> 
    </h:commandLink> 
</h:dataTable> 

EditBean.java

@ManagedBean 
@ViewScoped 
public class EditBean{ 

    private Entity selectedEntity; 

    @PostConstruct 
    public void init() { 
     Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     long selectedEntityId = Long.parseLong(params.get("selectedEntityId")); 

     selectedEntity = SomeEntityManagerUtil.getEntity(selectedEntityId); 
    } 
} 
+0

'<е: param' не получил' key' атрибут, его называют 'name' – Daniel

+0

окна, я исправил ошибку в почте. Но проблема в том, что RequestParameterMap.get ("paramName") возвращает строки, а не объект Entity. – artgrohe

+0

, чем передать 'id' и получить * сущность * с помощью этого' id' или использовать 'конвертер', а внутри он переводит' id' в объект ... – Daniel

ответ

0

Основная идея может быть:

Чтобы передать id этого объекта и получить объект по этому id позже ...

Вы также можете использовать конвертер и внутри него перевести что идентификатор в сущности ...

так:

<h:inputText value="#{editBean.selectedEntity.name}" converter="myEntityConverter"/> 
0

Может быть, вы должны объединить свои бобы, если они имеют один и тот же объем? Вы также можете использовать контекст: jsf-get-managed-bean-by-name

Также обратите внимание на этот вопрос: passing-data-between-managed-components-in-jsf

+0

Я думаю, что если перейти от listView к editView, представления изменились, и поэтому @ViewScoped Beans будут очищены (это правильно?). Не существует способа отправить Beans через RequestScope? Потому что это всего лишь запрос ... или нет? – artgrohe

Смежные вопросы