如何在JSF中在不编写转换器的情况下从一个页面传递对象到另一个页面

5
首先很抱歉我的英语不太好。我有两个JSF2页面,一个用于列出乘客,另一个用于创建/更新乘客。我也有两个@ViewScoped bean,一个用于保存乘客列表,另一个用于在页面B中保存所选乘客。我看到了通过viewParam或@ManagedProperty传递乘客的方法,但我不想编写转换器。
我想知道是否有一种方法可以在不传递乘客id并编写转换器或者不传递id并去数据库检索乘客的情况下将对象从页面A传递到页面B。我所做的并且有效的方法是:通过setPropertyActionListener在flash scope中设置所选对象,并导航到pageB,在viewScopedBean的@PostConstruct中获取flashScope并检索对象。就像我说的那样,这个方法有效,但我不知道它是否正确。以下是代码: Page A:
<p:column width="10" style="text-align: center;">                    
    <p:commandButton icon="ui-icon-pencil" action="editClientes?faces-redirect=true">                         
        <f:setPropertyActionListener target="#{flash.pax}" value="#{row}"/> 
     </p:commandButton>
</p:column>

pageB bean的@PostConstruct

@PostConstruct
private void initBean(){          
    this.pax = (Passenger) JSFUtils.getFlashScope().get("pax"); 
    if(this.pax == null){
        this.pax = new Passenger();
    }           
}

这种方法正确吗?还是编写转换器是正确的方法?谢谢。

1个回答

8

这取决于您是否希望/editClientes请求是idempotent(“可书签化的”)。

Flash方法不是幂等的。无法链接/共享/收藏/editClientes URL以编辑特定客户端。当最终用户复制此URL以进行共享/收藏并在其上重新执行请求时(即使只是在浏览器地址栏中按[Enter]),所有最终用户将面临的是空的编辑表单,而不是最初通过Flash范围选择的表单。

请求参数方法是幂等的。最终用户能够每次重新执行请求时获得完全相同的响应

我们不能决定您的/editClientes页面是否应该是幂等的。这是您的决定。

另请参阅:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接