1

我正在尝试使用 Ajax 和 JSF 2.0/primeface 创建一个简单的下拉框。基于 First Dropdown 选择,第二个下拉框使用 AJAX 调用填充。

当我选择第一个下拉列表时,它会根据 Ajax 调用正确填充第二个下拉框。但是当我在第二个下拉列表中进行选择并单击按钮{基本上提交表单以进行某些操作}时,它会给出错误消息“formViewBusinessCode:selectedBusinessCode:验证错误:值无效”

当我签入控制台时,“selectedBusinessCode”{Id of second dropdown} 的值为空。我很困惑,因为它正确填充但只有在选择后它才会给出错误值无效(基本上为空),为什么选择的值没有到达 bean?有人可以指出我在这里缺少的东西吗,TIA

xhtml代码如下

<h:outputText styleClass="outputText" value="#{constant.businessCodeGroup}"></h:outputText>
<h:selectOneMenu id="selectedBusinessCodeGroup" value="#{viewBusinessCodeBean.selectedBusinessCodeGroup}" >
    <f:selectItem itemValue="SELCT" itemLabel="Select Business Code Group" />
    <f:selectItems value="#{viewBusinessCodeBean.businessCodeGroupList}" />
    <p:ajax listener="#{viewBusinessCodeBean.getOnlyBusinessCodeListByAjaxCall}" event="change" update="selectedBusinessCode" process="@this"/>
</h:selectOneMenu> 

<h:outputText styleClass="outputText" value="#{constant.businessCode}"></h:outputText>
    <h:selectOneMenu id="selectedBusinessCode" value="#{viewBusinessCodeBean.selectedBusinessCode}">
    <f:selectItem itemValue="SELCT" itemLabel="Select Business Code" />
    <f:selectItems value="#{viewBusinessCodeBean.businessCodeList}" itemLable="#{viewBusinessCodeBean.businessCodeList.getlable}"
    itemValue="#{viewBusinessCodeBean.businessCodeList.getValue}" />
</h:selectOneMenu>

<h:commandButton value="View" action="#{viewBusinessCodeBean.getOnlyBusinessCodeDescription}"></h:commandButton>

bean编码如下。它是一个@ManagedBean

填充第一个下拉框

public ViewBusinessCodeBean() {
    logger.entering(CLASS_NAME);
    this.businessCodeGroupList = new ArrayList<SelectItem>();
    List<String>tempBusinessCodeList = new BusinessCodeTableServices().getBusinessCodeGroupList();
    Iterator<String>iterator = tempBusinessCodeList.iterator();
    while(iterator.hasNext()){
        String businessCodeGroup = iterator.next();
        logger.debug(businessCodeGroup);
        SelectItem item = new SelectItem(businessCodeGroup);
        businessCodeGroupList.add(item);
    }
    logger.exiting(CLASS_NAME);
}

填充第二个下拉列表的 Ajax 调用方法

public void getOnlyBusinessCodeListByAjaxCall() {
    this.businessCodeList = new ArrayList<SelectItem>();
    List<String>tempBusinessCodeList = new BusinessCodeTableServices().getOnlyBusinessCodeList(getSelectedBusinessCodeGroup());
    Iterator<String>iterator = tempBusinessCodeList.iterator();
    while(iterator.hasNext()){
        String businessCode = iterator.next();
        SelectItem item = new SelectItem(businessCode,businessCode,businessCode);
        businessCodeList.add(item);
    }   
}
4

1 回答 1

0

您的 bean 显然在请求范围内。请求范围的 bean 会在每个请求上重建,所有属性都设置为默认值。您的验证错误是因为在处理表单提交的请求期间businessCodeList属性已变为/empty。null

将 bean 放在视图范围内应该可以解决这个问题。

也可以看看:

于 2013-02-22T12:38:45.527 回答