如何在CDI bean中使用对话?

时间:2013-12-23 04:22:07

标签: jsf cdi

JavaScript使用此网址pl_edit.xhtml?id=1请求页面。它使用下面的PlayerEditBeanload()方法从数据库中提取玩家。它工作正常。该页面包含一个“保存”按钮,该按钮会发布到下面显示的save()方法。

这是我第一次尝试对话。我没有多页面对话框。我只是希望对话可以为我保留playerEditBean.player的状态。不幸的是,它不起作用。在save()中,播放器对象是新构造的,具有空id。

我是如何使用对话的?

@Named
@ConversationScoped()
public class PlayerEditBean implements Serializable {
private static final long serialVersionUID = 1L;

@Inject
private Conversation conversation;

@Inject
PlayerService playerService=null;

private Player player=null;


@PostConstruct
public void load() {
    conversation.begin();

    // assume valid id is passed and we're loading a player from database
    String strId=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
    player=playerService.getPlayer(Long.valueOf(strId));

}


public void save() {

    System.out.println("Persisting player with id " + player.getId());
    playerService.savePlayer(player);
    conversation.end();     
}

1 个答案:

答案 0 :(得分:0)

您需要从第一个电话中检索cid参数,并将其与保存电话一起发送,以将请求与正确的会话相关联。