提交一个有 ajax 和命令按钮问题的表单(先点击不发送,然后就可以了)



我在JSF应用程序中遇到了以下问题:我有一个包含多个表单的页面,每个表单都由两个commandButton和一个ajax标记组成。我想在用户点击第二个按钮时执行addArticleToCart方法,但我也想在backingbean中设置一个属性(qty),以使这个值可用于我的addArticle方法。问题是,当我不使用ajax标记时,qty值被设置为最后一个inputtext值(而不是单击的值)。当我使用ajax时,第一次点击页面是有效的,但随后:-如果我点击另一个表单按钮,第一次点击不起作用(第二次、第三次…起作用)。。。-如果我点击同一个表单,它就会工作。。。

所以我想问,在没有ajax的情况下,有可能做到我需要的吗?因为这让我抓狂,当我从ajax标签中删除render属性时,方法被调用,但(购物车的)价格没有更新,我必须执行刷新。。。提前感谢的帮助

<composite:implementation>
    <li class="span2 thumbnail">
        <h:form id="cocktailThumbnail">
            <div class="filling-thumb">
                <ui:param name="img_path" value="img:#{cc.attrs.item.photoURIName}.#{cc.attrs.item.photoURIExt}" />
                <img src="#{resource[img_path]}" alt="Cocktail#{cc.attrs.item.name}"/>
            </div>
            <div class="caption">
                <h3 class="title-cocktail">#{cc.attrs.item.name}</h3>
                <div class="text-center">
                    <div class="btn-group" >
                        <h:commandButton image="#{resource['img:info_small.png']}"
                                         alt="Détails du cocktail"
                                         title="#{dataManagedBean.getCocktail(cc.attrs.item.ID).getRecipe()}"
                                         styleClass="btn"
                                         action="#{dataManagedBean.displayCocktailDetails(cc.attrs.item)}">
                        </h:commandButton>
                    </div>
                    <br/><br/>
                    <div class="input-prepend">
                        <h:commandButton image="#{resource['img:cart_small.png']}"
                                         alt="Ajouter le cocktail au panier"
                                         title="Ajouter le cocktail au panier"
                                         styleClass="btn"
                                         actionListener="#{dataManagedBean.addArticleToCart(cc.attrs.item)}">
                            <!--Utilisation de ajax sinon lors du clic tous les input sont envoyé et donc qty = qty du dernier input
                            Avec ajax on envoie que ce form et it works -->
                            <f:ajax execute="@this" render="@all" />
                        </h:commandButton>
                        <h:inputText alt="Nombre de cocktails à ajouter au panier"
                                     maxlength="3"
                                     value="#{dataManagedBean.qty}"
                                     styleClass="input-mini"
                                     title="Nombre de cocktails à ajouter au panier" />
                    </div>
                </div>
            </div>
        </h:form>
    </li>
</composite:implementation

编辑:当我用render=":menubar"更改渲染时,一切都很好,它可以做我想要的。。。你有解释吗?

您似乎面临以下BalusC描述的问题:

<a4j:命令按钮>操作仅在第二次点击时调用

简单地说,使用render="@all"会导致h:form重新渲染,而使用render=":menubar"则不会。当h:form被重新渲染时,重新渲染后的第一个请求失败。

相关内容

最新更新