mar*_*zzz 6 ajax jsf facelets jsf-2
当我进行ajax调用时,我需要将参数传递给bean.
我的豆是这样的:
@ManagedBean
@RequestScoped
public class Selector {
@ManagedProperty(value="#{param.page}")
private String page;
@PostConstruct
public void init() {
if(page==null || page.trim().isEmpty()) {
this.page="homepage";
}
System.out.println(this.page);
}
public String getPage() { return page; }
public void setPage(String page) { this.page=page; }
}
Run Code Online (Sandbox Code Playgroud)
并且,当我执行ajax调用时,我需要(由于我想呈现不同的上下文的事实)页面参数.所以我做到了这一点:
// in this moment selector.page = articles
<h:inputHidden value="#{selector.page}" id="page" />
<h:commandLink>
<f:setPropertyActionListener target="#{articlesSelector.order}" value="1" />
<f:ajax event="click" render=":articlesContent"/>
<h:graphicImage value="img/arrow_up.png" alt="Arrow Up"/>
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
但是,在应用请求阶段,页面仍然是"主页".它应该从请求中获取page-parameter,将其应用于Component树并呈现"articles"上下文.为什么不会发生?
干杯
因为值<h:inputHidden>仅在更新模型值阶段期间设置.这确实是一种在JSF中存在很长时间的不直观的行为.我曾经报道过一个关于这个的问题,但这个问题因"按设计"而被关闭.
有几种方法可以解决这个问题,其中包括视图范围.在您的特定情况下,您可以使用<f:param>而不是<h:inputHidden>:
<h:commandLink>
<f:param name="page" value="#{selector.page}" />
<f:setPropertyActionListener target="#{articlesSelector.order}" value="1" />
<f:ajax event="click" render=":articlesContent"/>
<h:graphicImage value="img/arrow_up.png" alt="Arrow Up"/>
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
然后它将作为请求参数提供,#{param.page}并在您的请求范围内的bean中设置为@ManagedProperty.
| 归档时间: |
|
| 查看次数: |
10112 次 |
| 最近记录: |