如何使用ajax提交h:selectOneRadio?

时间:2014-08-08 22:46:24

标签: ajax jsf primefaces radio-button

我在按照自己认为的方式工作时遇到了问题。我有一个dataTable,我从一个福利对象列表构建。这些对象中的每一个都可以只有一种类型:组,帐户或父级。我想在选择单选按钮时刷新列表。页面加载时,将显示组对象并预先选择组单选按钮。如果用户单击帐户单选按钮,我使用Ajax刷新列表,这次显示Account对象。以下是精简代码: XHTML:

<!-- Radio button to subset records  -->
<h:selectOneRadio
    id="varButtons"
    value="#{benefitUI.buttonValue}"
    styleClass="radio">
    <f:selectItem
        itemLabel="Group"
        itemValue="G" />
    <f:selectItem
        itemLabel="Account"
        itemValue="A" />
    <f:selectItem
        itemLabel="Parent"
        itemValue="P" />
    <p:ajax event="click" update="benList" process="@this"  />
</h:selectOneRadio>
<p:dataTable
    id="benList"        
    var="ben"
    value="#{benefitUI.filteredBenefitList}"
    rowIndexVar="vbRowIndex"
    rowClasses="panel-grid-row-odd, panel-grid-row-even"
    styleClass="mimic-datatable"

    <p:column headerText="From" style="text-align:center;">
        <h:outputText value="#{ben.beginDate}"/>
    </p:column>
    <p:column headerText="To" style="text-align:center;">
        <h:outputText value="#{ben.endDate}"/>
    </p:column>
</p:dataTable>

BenefitUI的Java:

@PostConstruct
public void init() {
    /* Code that creates my unfiltered list removed for brevity. */
    /** benefitList is the name of the unfiltered list **/
    // Pre-select group on page load
    setButtonValue("G");
}

public List<Benefit> getFilteredBenefitList() {
    String filter = getButtonValue();

    List<Benefit> filteredList = new ArrayList<Benefit>();
    for (Benefit vb : benefitList) {
        // The below code is working just fine, when filter is not blank
        if ((filter.equals("G") & vb.getGroup() != null)
                || (filter.equals("A") & vb.getAccount() != null)
                || (filter.equals("P") & vb.getParent() != null)) {
            filteredList.add(vb);
        }
    }

    return filteredList;
}

public void setButtonValue(String bValue) {
    this.buttonValue = bValue;
}

public String getButtonValue() {
    return this.buttonValue();
}

页面加载得很好,显示了组的好处。但是当我单击“帐户”按钮时,会将空字符串传递给setButtonValue方法,因此在构建筛选列表时,不会包含任何记录,并且页面会显示一个空列表。我怎么做错了itemValue没有被发送到setButtonValue?其次,为什么setButtonValue和getFilteredBenefitList方法都被调用了四次?

我确定在Ajax行或selectItem上有关键字或遗漏的内容,但我不知道它可能是什么。

0 个答案:

没有答案