如何在JSF中将对象从一个页面传递到另一个页面而无需编写转换器

SaG*_*RiO 5 jsf redirect parameter-passing view-scope jsf-2.2

首先抱歉我的英语.我在JSF2中有两个页面,一个用于列出乘客,另一个用于创建/更新乘客.我还有两个@ViewScoped bean,一个带有乘客列表,另一个用于在pageB中保留所选乘客.我看到了通过viewParam或@ManagedProperty传递乘客的方法,但我不想写一个转换器.

我想知道是否有办法将对象从pageA传递给pageB而不传递乘客的id并写入转换器或没有传递id然后转到DB来检索乘客.我的工作和工作如下.我通过setPropertyActionListener在flash范围内设置所选对象并导航到pageB,在viewScopedBean的@PostConstruct中我获取flashScope并检索该对象.正如我所说,这有效,但我不知道它是否正确.这是代码页面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>
Run Code Online (Sandbox Code Playgroud)

pageB bean的@PostConstruct

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

这是正确的,还是正确的方法是编写转换器?谢谢.

Bal*_*usC 8

取决于您是否希望/editClientes请求是幂等的("可收藏").

闪存方法不是幂等的.无法链接/共享/加入/editClientesURL以编辑特定客户端.当最终用户复制此URL以进行共享/书签并在其上重新执行请求时(即使它只是在浏览器的地址栏中按[enter]),所有最终用户将面对的是新客户端的空编辑表单而不是一个最终用户最初通过闪存范围选择.

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

我们决定您的/editClientes网页是否应该是幂等的,这不是我们的决定.是你的.

也可以看看: