0

我正在使用 Primefaces3.5 和 Jsf2.1.9 我遇到了一个奇怪的问题

 <p:commandButton>

 <p:commandLink>

我必须按下按钮并链接多个,然后 JSF bean 方法正在调用,否则单击没有发生当我阅读一些Stackoverflow问题时,此问题与JSF相关,但即使将 Primfaces3.5 与他们的组件一起使用,我也遇到了这个问题。任何人都知道我该如何解决这个问题。我的 JSF 页面

<ui:composition xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:p="http://primefaces.org/ui"
    template="./../portfolio/PortfolioViewTemplate.xhtml">


    <ui:define name="moduleContent">

        <p:panel id="panel" header="Portfolio Transaction">
            <p:messages id="msgs" />


            <p:panelGrid id="addMoreTrans" columns="2" style="border-style:none;">
                <f:facet name="header">
                       Add Trades
                </f:facet>
                <p:dataTable var="moreTrans"
                    value="#{portfolioTransactionBean.listOfTrasPanel}" style="border:none;" >

                    <p:column style="border:none;">
                        <p:panelGrid columns="7" id="transactionPanel1"
                            style="display: inline-block;border:none;">


                            <h:outputLabel for="tipsSuggestionBoxId" value="Company Name:*"></h:outputLabel>

                            <h:outputText value="Date:*" />

                            <h:outputText value="Type:*" />

                            <h:outputText value="Quantity:*" />

                            <h:outputText value="Price:*" />

                            <h:outputText value="Brokerage:" />

                            <h:outputText value="Notes:" />

                            <p:autoComplete id="tipsSuggestionBoxId"
                                completeMethod="#{applicationScopeBean.autoSelectCompany}"
                                value="#{portfolioTransactionBean.txnCurrentRecord.companyName}"
                                minChars="3" nothingLabel="No similar company found"
                                requestDelay="1" minQueryLength="3" required="true"
                                requiredMessage="Company Name Cannot be empty">
                            </p:autoComplete>

                            <p:calendar id="from_date1" size="10" required="true"
                                requiredMessage="Date Cannot be empty"
                                value="#{portfolioTransactionBean.txnCurrentRecord.umptTransDate}"
                                mode="popup" showOn="both" pattern="dd/MM/yyyy"
                                popupIconOnly="true" readonly="#{facesContext.renderResponse}"
                                navigator="true" showButtonPanel="true">
                            </p:calendar>

                            <p:selectOneMenu id="tranType"
                                value="#{portfolioTransactionBean.txnCurrentRecord.umptTransType}">
                                <f:selectItem itemLabel="Transaction Type" itemValue="" />
                                <f:selectItem itemLabel="Buy" itemValue="Buy" />
                                <f:selectItem itemLabel="Sell" itemValue="Sell" />
                                <f:selectItem itemLabel="Bonus" itemValue="Bonus" />
                                <f:selectItem itemLabel="Split" itemValue="Split" />
                            </p:selectOneMenu>


                            <p:spinner id="transQuntity1" required="true"
                                value="#{portfolioTransactionBean.txnCurrentRecord.umptQty}"
                                min="1" label="Quanity" size="5"
                                validatorMessage="Field Is mandatory" />

                            <p:spinner id="transPrice1" required="true" size="5"
                                value="#{portfolioTransactionBean.txnCurrentRecord.umptPrice}"
                                label="Price" validatorMessage="Field Is mandatory" />



                            <p:spinner id="brokerage1" size="5"
                                value="#{portfolioTransactionBean.txnCurrentRecord.umptBrokerage}" />

                            <h:inputText
                                value="#{portfolioTransactionBean.txnCurrentRecord.umptNotes}" />

                        </p:panelGrid>
                    <p:separator id="customSeparator" style="width:100%;height:10px" />

                    </p:column>
                </p:dataTable>
                <f:facet name="footer">


                    <p:commandButton value="Clear"
                        actionListener="#{portfolioTransactionBean.clearRecord}"
                        process="@this"
                        rendered="#{portfolioTransactionBean.onClickofButton}">
                    </p:commandButton>
                    <p:spacer width="100" height="10" />
                    <p:commandButton value="Save Transaction " icon="ui-icon-check"
                        action="#{portfolioTransactionBean.savePortfolioTransaction}"
                        style="float:right;right:20%;"
                        rendered="#{portfolioTransactionBean.onClickofButton}">

                    </p:commandButton>
                    <p:commandButton value="Add More Transaction " icon="ui-icon-check"
                        action="#{portfolioTransactionBean.addMoreTransPanel}"
                        process="@this" update="addMoreTrans"
                        rendered="#{portfolioTransactionBean.onClickofButton}" />


                </f:facet>
            </p:panelGrid>



            <p:panelGrid columns="2" id="allTransactionPanel">
                <p:dataTable value="#{portfolioTransactionBean.transactionsList}"
                    var="tradeRec">
                    <f:facet name="Header">
                        <h:outputText>Recently Added Trades</h:outputText>
                    </f:facet>

                    <p:column headerText="Company">
                        <h:outputText value="#{tradeRec.companyName}"></h:outputText>
                    </p:column>
                    <p:column headerText="Date">
                        <h:outputText value="#{tradeRec.umptTransDate}">
                            <f:convertDateTime dateStyle="medium"></f:convertDateTime>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Type">
                        <h:outputText value="#{tradeRec.umptTransType}"></h:outputText>
                    </p:column>
                    <p:column headerText="Quantity">
                        <h:outputText value="#{tradeRec.umptQty}"></h:outputText>
                    </p:column>
                    <p:column headerText="Price">
                        <h:outputText value="#{tradeRec.umptPrice}">
                            <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Brokerage">
                        <h:outputText value="#{tradeRec.umptBrokerage}">
                            <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                        </h:outputText>
                    </p:column>
                </p:dataTable>
            </p:panelGrid>
        </p:panel>

    </ui:define>
</ui:composition>

模板文件...

<ui:composition xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:p="http://primefaces.org/ui" 
    template="./../templates/MasterTemplate.xhtml">


    <ui:define name="moduleDetails">
        <h:form name="portfolioMenuForm">
        <f:event type="javax.faces.event.PreRenderViewEvent" listener="#{applicationScopeBean.preRenderView}"/>
            <table style="width: 100%; min-height: 500px; border: none">

                <tr>
                    <td>
                    <p:menu>
                        <p:submenu label="Portfolio Views"> 
                            <p:menuitem value="Add Transactions" action="PortfolioTransactionMgmt" update="@form"   immediate="true" />
                            <p:menuitem value="View Transactions"  action="PortFolioTranView"   update="@form"   immediate="true"  />
                            <p:menuitem value="Latest Holdings"  action="PortfolioHolding"  update="@form" immediate="true" />
                            <p:menuitem value="Sector Allocations"  action="#{portfolioTransactionBean.showSecAllocation}"  update="@form" immediate="true" />
                            <p:menuitem value="Realized Profit"  action="PortfolioRelizeProfit"  update="@form" immediate="true" />
                            <p:menuitem value="Portfolio Performance"  action="#{portfolioTransactionBean.showPortPerformance}"  update="@form" immediate="true" />
                            <p:menuitem value="Benchmark Comparison"  action="#{portfolioTransactionBean.showBenhComparison}"  update="@form" immediate="true" />
                         </p:submenu>   
                    </p:menu>
                    </td>
                    <td>
                        <ui:insert name="moduleContent"></ui:insert>
                    </td>
                </tr>

            </table>
        </h:form>
    </ui:define>


</ui:composition>
4

2 回答 2

0

基本上这不是奇怪的问题在第一次单击时,jsf 首先查看是否有 (javax.faces.ViewState) 状态可用,如果它不可用,那么它会为你创建一个 & 当你第二次单击时,因为 Jsf 状态可用它调用 bean 方法。解决方案:尝试通过javascript函数创建jsf状态

于 2013-02-17T16:30:22.480 回答
0

感谢primefaces 的Çağatay Çivici项目负责人。他建议我

然后尝试使用 2.1.17,showcase 是 2.1.17。

所以我为 jsf 更新了我的 pom,它就像一个魅力。

谢谢

于 2013-02-19T13:02:24.067 回答