像往常一样,我在请求的scoped bean上使用一些ajax调用时遇到了一些麻烦。
我有这个豆子:
@ManagedBean
@RequestScoped
public class ArticlesSelector implements Serializable {
@ManagedProperty(value="#{param.type}")
private String type;
private String zone;
private String order;
@PostConstruct
public void init() {
if(type==null || type.trim().isEmpty()) { this.type="1"; }
if(zone==null || zone.trim().isEmpty()) { this.zone="list"; }
if(order==null || order.trim().isEmpty()) { this.order="1"; }
}
public String getType() { return type; }
public void setType(String type) { this.type = type; }
public String getZone() { return zone; }
public void setZone(String zone) { this.zone=zone; }
public String getOrder() { return order; }
public void setOrder(String order) { this.order = order; }
public ArrayList<String[]> getArticleList() {
...
System.out.println("ORDER = "+this.order);
...
}
}
当我这样做时:
<h:panelGroup layout="block" id="articlesContent">
<h:form id="formArticles">
<h:outputScript name="jsf.js" library="javax.faces" target="head" />
<h:panelGroup rendered="#{articlesSelector.zone=='list'}">
<h:panelGroup layout="block" id="articlesContentList">
<h:commandLink>
<f:setPropertyActionListener target="#{articlesSelector.order}" value="2" />
<f:ajax event="click" render=":articlesContent"/>
<h:graphicImage value="img/arrow_down.png" alt="Arrow Down"/>
</h:commandLink>
<h:outputLabel value="#{articlesSelector.articleList}" />
</h:panelGroup>
</h:panelGroup>
</h:form>
</h:panelGroup>
订单值始终为1
。似乎没有调用setter方法。此时间不是渲染错误,因为该操作在应用请求和更新模型阶段呈现(事实上,System.out.println("ORDER = "+this.order);
烦恼#{articlesSelector.articleList}
每次我点击图片都会调用它。那么,这次是什么时候?
请求范围让我有点紧张:)
由于
答案 0 :(得分:2)
f:ajax
应该event="action"
而不是event="click"
。
是的,我知道我曾在你的问题评论中建议使用click
,但我显然是错误的。很抱歉:)
答案 1 :(得分:0)
你f中id的开头的“:”:ajax render属性是指一个完全限定的,或绝对的id,但你放在那里的值不是绝对的。
将渲染属性值更改为相对:
render="articlesContent"
或绝对的:
render=":articlesContent:formArticles:articlesContent"