下拉菜单-如何使用jsf为一行中的每个下拉菜单获取不同的组件id



我有如下数据表:

<p:dataTable id="transactionTableID" binding="#{transactionReportBean.dataTable}" 
    value="#{transactionReportBean.summarizedDateWiseTransactionList}"
    var="transacVAR" rowKey="#{transacVAR.OID}" style="float:center;">
    <p:column headerText="#{build.reportSelection}">
        <p:selectOneMenu id="" value="#{transactionReportBean.summaryTxnReportSelected}"  >
            <f:selectItem itemLabel="-Select One-" itemValue="-Select One-"/>
            <f:selectItem itemLabel="#{build.matchedreport}" itemValue="#{build.matchedreport}"/>
            <f:selectItem itemLabel="#{build.carryforwardreport}" itemValue="#{build.carryforwardreport}"/>
            <f:selectItem itemLabel="#{build.exceptionreport}" itemValue="#{build.exceptionreport}"/>
        </p:selectOneMenu>
        <p:commandButton  update="@form" value="Generate" ajax="false"
            actionListener="#{transactionReportBean.getReportSelected}" />
    </p:column>
</p:dataTable>

和一个动作监听器方法,如下所示:

public void getReportSelected(){
    if(this.SummaryTxnReportSelected.equalsIgnoreCase("-Select One-")||this.SummaryTxnReportSelected.equalsIgnoreCase(null)){
        this.message = AlgoMessageHandler.getMessage(AlgoMessageHandler.USER_MSG, "ERR0048");
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                      this.getMessage(), AFTSConstants.BLANK_STRING));
    } else {
        this.selectedDtTxn= (TransactionsSummaryReportVO) dataTable.getRowData();
        System.out.println("listener called "+this.getSummaryTxnReportSelected()+" Selected transaction ID "+selectedDtTxn.getExecutionID());  
        String reportname = generateJasperReport(this.getSummaryTxnReportSelected(),AFTSConstants.SUMMARY_TXN_REPORT,this.selectedDtTxn);
        System.out.println("Report Name"+reportname);
        this.summaryReportStored= AFTSConstants.SUMMARY_REPORT_STORED_PATH+reportname+".pdf";
        System.out.println(this.summaryReportStored);
        this.setRenderGenerateButton(false);
    }
}

该方法将根据我们选择的下拉项生成报告。在我的表中,我有10行,每行包含一个下拉列表,包含3个项目。有一个"生成"按钮。在选择下拉项并单击"生成"按钮后,对于前9行,它不给出组件id,对于第10行,它正在工作。

这里的问题不是关于生成报告,问题是JSF没有为每行中的每个下拉列表获取不同的组件id。我试过id="reportID",但没有成功。我试图给表rowKey="#{transacVAR.OID}"作为id="#{transacVAR.OID}"的行键值,但它抛出一个异常,如"空组件id"。

我该如何解决这个问题?

您的问题与组件id无关。造成问题的原因是将所有行的提交值绑定到同一个bean属性。JSF根据输入元素在树中出现的顺序处理提交的值。因此,JSF将使用提交的值为每一行调用相同的setter方法,直到到达最后一行为止。最后得到最后一行的值。如果您在setter方法上放置了一个断点,您就会注意到,随后调用setter方法时,每一行的值都不同。

您需要将值绑定到当前迭代的行对象。

<p:selectOneMenu value="#{transacVAR.summaryTxnReportSelected}">

相关内容

  • 没有找到相关文章

最新更新