0

私は Jsf2.1.9 で Primefaces3.5 を使用しています。

 <p:commandButton>

としても

 <p:commandLink>

ボタンを押して複数のリンクを作成する必要があり、それ以外の場合はシングル クリックで JSF Bean メソッドが呼び出されますこの問題を解決するにはどうすればよいですか。私の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

Primefaces のÇağatay Çivici Project リーダーに 感謝します。

2.1.17 で試してください。ショーケースは 2.1.17 です。

だから私はjsfのpomを更新しましたが、それは魅力のように機能します。

ありがとう

于 2013-02-19T13:02:24.067 に答える
0

基本的にこれは問題ではありません最初のクリックでjsfは最初に(javax.faces.ViewState)状態が利用可能かどうかを調べ、利用できない場合はそれを作成し、Jsf状態が利用可能であるため2回目にクリックするとBean メソッドを呼び出します。解決策:javascript関数を使用してjsf状態を作成してみてください

于 2013-02-17T16:30:22.480 に答える