JSF - 为什么这次没有调用setter?

时间:2010-12-02 11:26:11

标签: ajax jsf jsf-2 facelets javabeans

像往常一样,我在请求的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}每次我点击图片都会调用它。那么,这次是什么时候?

请求范围让我有点紧张:)

由于

2 个答案:

答案 0 :(得分:2)

f:ajax应该event="action"而不是event="click"

是的,我知道我曾在你的问题评论中建议使用click,但我显然是错误的。很抱歉:)

答案 1 :(得分:0)

你f中id的开头的“:”:ajax render属性是指一个完全限定的,或绝对的id,但你放在那里的值不是绝对的。

将渲染属性值更改为相对:

render="articlesContent"

或绝对的:

render=":articlesContent:formArticles:articlesContent"