我陷入了类似的导航案例问题this一。
简而言之,我正在尝试使用 ajax 渲染将导航从一个页面重定向到另一个页面h:commandLink
。
这是支持 bean
@ManagedBean
public class StartBean {
public void search(){
FacesContext
.getCurrentInstance()
.getExternalContext()
.getFlash()
.put("result", "hooray!")
;
}
public String showResult(){
return "result?faces-redirect=true";
}
}
和起始页
<h:body>
<h:form prependId="false">
<h:commandButton value="Click" action="#{startBean.search}">
<f:ajax execute="@this" render="@form"/>
</h:commandButton>
<br/>
<h:commandLink
action="#{startBean.showResult()}"
rendered="#{flash.result != null}"
value="#{flash.result}"
/>
</h:form>
</h:body>
whereas result
页面仅显示一条消息。这两个页面都位于 Web 模块上下文根上。
碰巧的是h:commandLink
ajax提交后显示正确,但是点击会导致页面刷新。它不会重定向到result
页面,如预期。
之后,如果重新加载页面(F5),result
显示页面。这似乎是渲染周期的问题。
有什么建议吗?
提前致谢。
The rendered
所有输入和命令组件的属性是重新评估提交表格时。所以如果它评估false
,那么 JSF 就不会调用该操作。当请求/响应时,Flash作用域终止search()
方法完毕。当您发送以下请求时,它不再存在于 Flash 范围内showResult()
。我建议将 bean 放在视图范围中并绑定rendered
属性改为其属性。
@ManagedBean
@ViewScoped
public class StartBean {
private String result;
public void search(){
result = "hooray";
}
public String showResult(){
return "result?faces-redirect=true";
}
public String getResult() {
return result;
}
}
with
<h:commandLink
action="#{startBean.showResult}"
rendered="#{startBean.result != null}"
value="#{startBean.result}"
/>
也可以看看:
- commandButton/commandLink/ajax 操作/侦听器方法未调用或输入值未更新
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)