JSF监听器触发按钮onclick

时间:2013-05-12 15:19:14

标签: jsf button triggers onclick

<h:form>
            <h:selectOneMenu value="#{productBean.productName}">
                <f:selectItem itemValue="" itemLabel="..." />
                <f:selectItems value="#{productBean.pizza}" var="pizza" itemValue="#{pizza.name}" itemLabel="#{pizza.name}" />
                <f:ajax listener="#{productBean.valueChanged(productBean.productName)}" render="pizzaResult pizzaButton" />
            </h:selectOneMenu>
            <h:commandButton value ="Dodaj do zamówienia" disabled="#{productBean.isDisabled}"  id="pizzaButton" onclick="#{productBean.order}"/>
            <h:outputText id="pizzaResult" value="#{productBean.message}" />
        </h:form>

这是我的JSF表单。我使用valueChanged监听器在ome情况下制作按钮,并且效果很好。但我不知道它为什么触发按钮onclick。如何做一些让我在点击后只使用按钮的东西?

我注意到当我删除禁用选项时效果很好:/但是为什么当按钮启用时我无法触发操作?

2 个答案:

答案 0 :(得分:0)

onclick是客户端属性,因此您不应尝试将其绑定到托管bean方法调用,看起来好像是onclick=#{productBean.order}(除了缺少的引号)。这可能是您遇到问题的原因。

答案 1 :(得分:0)

好的,我做到了。问题是该按钮可能显示为已启用(disabled="false"),但其客户端更改和服务器不知道它,并且应用程序认为该按钮仍处于禁用状态。即使它看起来像启用按钮,它也无法与action="#{something}"一起使用。 您必须让服务器知道更改。我所做的只是将@ViewScoped添加到托管bean。现在,服务器也可以看到禁用和启用按钮的操作,并且工作正常。

但是我有一个问题。客户端验证是一个坏主意。禁用按钮是唯一阻止用户发送空itemValue或产品(在我的情况下)不可用(DB中为is_available = 0)的按钮。问题是:是否足以确保它是安全的?

编辑:不幸的是,点击按钮后,即使oneSelectMenu转为第一个空值,按钮也会启用。更改列表后,它再次像以前一样工作,再次点击后,情况需要一段时间。