0

So I Originally I had a

    <h:selectBooleanCheckbox value="#salesExpenseController.addSalesExpense.fixed}" >
<h:ajax event="change" listener="#{salesExpenseController.checkFixed()}" render = "addBidPrice addBidTotal" />
</h:selectBooleanCheckbox>

Listener function:

public String checkFixed() {
        if (this.getAddSalesExpense().getFixed()) {
            if (this.subOperation.equals(_add)) {
                getAddSalesExpense().setBidPrice(BigDecimal.ZERO);
            }
            if (this.subOperation.equals(_edit)) {
                getEditSalesExpense().setBidPrice(BigDecimal.ZERO);
            }

        } else {
            if (this.subOperation.equals(_add)) {
                getAddSalesExpense().setBidTotal(BigDecimal.ZERO);
            }
            if (this.subOperation.equals(_edit)) {
                getEditSalesExpense().setBidTotal(BigDecimal.ZERO);
            }

        }


        return _viewTimberSale;
    }

Whenever I clicked my check box all other Command Links in that form would not work. I placed a System.out.println() in my checkFixed() and the ajax request wasn't reaching the function or giving any errors, acting like nothing was happening.

I fixed this issue by changing my checkbox to this:

<h:selectBooleanCheckbox value="#{salesExpenseController.addSalesExpense.fixed}" >
                                    <p:ajax event="change" listener="#{salesExpenseController.checkFixed()}" update = "addBidPrice addBidTotal" />
                                </h:selectBooleanCheckbox>

And everything worked fine and exactly how it should.

What is a possible explanantion?

Here is the faulty part of the form, I cannot post the entire form it goes over 30,000 chars:

<!-- START SALES EXPENSE -->
                    <h:panelGroup layout="block" rendered="#{timberSaleController.operation.equals(timberSaleController.saleExpense)}">
                        <h1>Sale Expense</h1>
                        <h:panelGroup layout="block">
                            <h:commandLink styleClass="actionLinkButton" value="#{messages.Link_add}" action="#{salesExpenseController.prepareAddSalesExpense(timberSaleController.selected)}" rendered="#{salesExpenseController.subOperation == null}" />
                            <h:commandLink styleClass="actionLinkButton" value="#{messages.Link_cancel}" action="#{salesExpenseController.resetValues()}" rendered="#{salesExpenseController.subOperation != null}"  />
                            <br/>
                            <br/>
                        </h:panelGroup>



                        <!--SALES EXPENSE TABLE -->
                        <h:panelGroup layout="block" rendered="#{salesExpenseController.subOperation == null}">
                            <h:dataTable value="#{salesExpenseController.getSaleList(timberSaleController.selected)}" var="exp" 
                                         border="0" 
                                         cellpadding="3" 
                                         cellspacing="0" 
                                         rowClasses="jsfcrud_odd_row,jsfcrud_even_row" 
                                         rules="all" 
                                         style="border:solid 1px; text-align: center;"
                                         rendered ="#{salesExpenseController.getSaleList(timberSaleController.selected).size() > 0}"
                                         >
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_description}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.description}" >
                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_category}" />
                                    </f:facet>
                                    <h:outputText value="#{timberSaleController.formatString(exp.expenseCategory)}" >
                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_fixedPrice}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.fixed}" >

                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_bidPrice}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.bidPrice}" >
                                        <f:convertNumber integerOnly="true" type="currency" />
                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_bidTotal}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.bidTotal}" >
                                        <f:convertNumber integerOnly="true" type="currency" />
                                    </h:outputText>
                                </h:column>
                                <h:column rendered = "#{exp.actualPrice != null}">
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_actualPrice}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.actualPrice}" >
                                        <f:convertNumber integerOnly="true" type="currency" />
                                    </h:outputText>
                                </h:column>
                                <h:column rendered = "#{exp.actualTotal != null}">
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_actualTotal}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.actualTotal}" >
                                        <f:convertNumber integerOnly="true" type="number" />
                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_lastEdited}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.lastEdited}" >
                                        <f:convertDateTime type="date" dateStyle="short" />
                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="#{messages.Title_lastEditedBy}" />
                                    </f:facet>
                                    <h:outputText value="#{exp.lastEditedBy}" >

                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="&nbsp;" />
                                    </f:facet>
                                    <h:commandLink value="#{messages.Link_edit}" action ="#{salesExpenseController.editSalesExpense(exp)}" />
                                    <br/>
                                    <h:commandLink value="#{messages.Link_complete}" action="#{salesExpenseController.prepareCompleteSalesExpense(exp)}" />
                                </h:column>
                            </h:dataTable>
                            <br/>
                            <br/>
                            <br/>

                            <h:panelGroup layout="block">
                                <table
                                    border="0" 
                                    cellpadding="3" 
                                    cellspacing="0" 
                                    rowClasses="jsfcrud_odd_row,jsfcrud_even_row" 
                                    rules="all" 
                                    style="border:solid 1px; text-align: center;"
                                    >
                                    <tr>
                                        <th>Categories</th>
                                        <th>Average Bid Price</th>
                                        <th>Bid Total</th>
                                    </tr>
                                    <ui:repeat value="#{salesExpenseController.getDistinctCategoriesBySale(timberSaleController.selected)}" var="cat">
                                        <tr>
                                            <td>
                                                <h:outputText value="#{timberSaleController.formatString(cat)}" />
                                            </td>
                                            <td>
                                                <h:outputText value="#{salesExpenseController.getAverageExpensePriceByCategoryAndSale(cat , timberSaleController.selected)}" >
                                                    <f:convertNumber integerOnly="true" type="currency"/>
                                                </h:outputText>
                                            </td>
                                            <td>
                                                <h:outputText value="#{salesExpenseController.getTotalExpenseByCategoryAndSale(cat, timberSaleController.selected)}" >
                                                    <f:convertNumber integerOnly="true" type="currency"/>
                                                </h:outputText>
                                            </td>
                                        </tr>
                                    </ui:repeat>
                                    <tr>
                                        <td>
                                            <h:outputText value ="Totals" />
                                        </td>

                                        <td>
                                            <h:outputText value ="#{salesExpenseController.getAverageBidPriceBySale(timberSaleController.selected)}" >
                                                <f:convertNumber integerOnly="true" type="currency"/>
                                            </h:outputText>
                                        </td>
                                        <td>
                                            <h:outputText value ="#{salesExpenseController.getTotalBidTotalBySale(timberSaleController.selected)}" >
                                                <f:convertNumber integerOnly="true" type="currency"/>
                                            </h:outputText>
                                        </td>
                                    </tr>
                                </table>

                            </h:panelGroup>



                        </h:panelGroup>


                        <!--SALES EXPENSE ADD -->
                        <h:panelGroup layout="block" rendered="#{salesExpenseController.subOperation.equals(timberSaleController.getAdd())}">
                            <h:panelGrid columns="3">
                                <h:outputLabel value="#{messages.Title_description}" />
                                <h:inputTextarea value="#{salesExpenseController.addSalesExpense.description}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Title_category}" />
                                <h:selectOneMenu value="#{salesExpenseController.addSalesExpense.expenseCategory}">
                                    <f:selectItems value="#{timberSaleController.dropDownHelper.getExpenseTypeSelectOne()}" />
                                </h:selectOneMenu>
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_fixed}" />
                                <h:selectBooleanCheckbox value="#{salesExpenseController.addSalesExpense.fixed}" >
                                    <p:ajax event="change" listener="#{salesExpenseController.checkFixed()}" update = "addBidPrice addBidTotal" />
                                </h:selectBooleanCheckbox>
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_bidPrice}" />
                                <h:inputText id="addBidPrice" value="#{salesExpenseController.addSalesExpense.bidPrice}" disabled="#{salesExpenseController.addSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_bidTotal}" />
                                <h:inputText id="addBidTotal" value="#{salesExpenseController.addSalesExpense.bidTotal}" disabled="#{!salesExpenseController.addSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:commandLink styleClass="actionLinkButton" value="#{messages.Link_add}" action="#{salesExpenseController.addSaleExpenseToSale()}" />
                            </h:panelGrid>
                        </h:panelGroup>

                        <!--SALES EXPENSE EDIT -->
                        <h:panelGroup layout="block" rendered="#{salesExpenseController.subOperation.equals(timberSaleController.getEdit())}">
                            <h:panelGrid columns="3">
                                <h:outputLabel value="#{messages.Title_description}" />
                                <h:inputTextarea value="#{salesExpenseController.editSalesExpense.description}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Title_category}" />
                                <h:selectOneMenu value="#{salesExpenseController.editSalesExpense.expenseCategory}">
                                    <f:selectItems value="#{timberSaleController.dropDownHelper.getExpenseTypeSelectOne()}" />
                                </h:selectOneMenu>
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_fixed}" />
                                <h:selectBooleanCheckbox value="#{salesExpenseController.editSalesExpense.fixed}" >
                                    <p:ajax event="change" listener="#{salesExpenseController.checkFixed()}" update="editBidPrice editBidTotal" />
                                </h:selectBooleanCheckbox>
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_bidPrice}" />
                                <h:inputText id="editBidPrice" value="#{salesExpenseController.editSalesExpense.bidPrice}" disabled="#{salesExpenseController.editSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_bidTotal}" />
                                <h:inputText id="editBidTotal" value="#{salesExpenseController.editSalesExpense.bidTotal}" disabled="#{!salesExpenseController.editSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:commandLink styleClass="actionLinkButton" value="#{messages.Link_complete}" action="#{salesExpenseController.completeEditSalesExpense()}" />
                                <h:commandLink styleClass="actionLinkButton" value="#{messages.Link_destroy}" action="#{salesExpenseController.destroyEditSalesExpense()}" />
                            </h:panelGrid>
                        </h:panelGroup>

                        <!--
                        COMPLETE LOG SALE
                        -->
                        <h:panelGroup layout="block" rendered="#{salesExpenseController.subOperation.equals(timberSaleController.getComplete())}">
                            <h:panelGrid columns="3">
                                <h:outputLabel value="#{messages.Title_description}" />
                                <h:inputTextarea disabled="true"  value="#{salesExpenseController.completeSalesExpense.description}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Title_category}" />
                                <h:selectOneMenu disabled="true" value="#{salesExpenseController.completeSalesExpense.expenseCategory}">
                                    <f:selectItems value="#{timberSaleController.dropDownHelper.getExpenseTypeSelectOne()}" />
                                </h:selectOneMenu>
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_fixed}" />
                                <h:selectBooleanCheckbox disabled="true" value="#{salesExpenseController.completeSalesExpense.fixed}" >
                                    <p:ajax event="change" listener="#{salesExpenseController.checkFixed()}" update="" />
                                </h:selectBooleanCheckbox>
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_bidPrice}" />
                                <h:inputText  value="#{salesExpenseController.completeSalesExpense.bidPrice}" disabled="#{salesExpenseController.completeSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_actualPrice}" />
                                <h:inputText value="#{salesExpenseController.completeSalesExpense.actualPrice}" disabled ="#{salesExpenseController.completeSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_bidTotal}" />
                                <h:inputText  value="#{salesExpenseController.completeSalesExpense.bidTotal}" disabled="#{!salesExpenseController.completeSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />
                                <h:outputLabel value="#{messages.Label_actualTotal}" />
                                <h:inputText value="#{salesExpenseController.completeSalesExpense.actualTotal}" disabled ="#{!salesExpenseController.completeSalesExpense.fixed}" />
                                <h:outputText value="&nbsp;" />


                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:outputText value="&nbsp;" />
                                <h:commandLink styleClass="actionLinkButton" value="#{messages.Link_complete}" action="#{salesExpenseController.completeCompleteSalesExpense()}" />
                            </h:panelGrid>
                        </h:panelGroup>




                    </h:panelGroup>
                    <!-- END ADD SALESEXPENSE -->
Sam Orozco
  • 1,258
  • 1
  • 13
  • 27

1 Answers1

0

i have no idea about primeFaces and how it performs ajax commands, but standard ajax listener methode shouldn't return any objects. But something like this:

public final void checkFixed(AjaxBehaviorEvent event){
     .....
}

and you use it like this:

listener="#{salesExpenseController.checkFixed}"

so if your view throws any JS-Errors due to any Java Exceptions like methode not found ...etc, this JS error will break down all commandLinks/buttons ...etc. Maybe primeFaces accepts methodes of listener like yours, so you don't get any error when you use primefaces ajax commands.

Rami.Q
  • 2,486
  • 2
  • 19
  • 30