<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。如何做一些让我在点击后只使用按钮的东西?
我注意到当我删除禁用选项时效果很好:/但是为什么当按钮启用时我无法触发操作?
答案 0 :(得分:0)
onclick
是客户端属性,因此您不应尝试将其绑定到托管bean方法调用,看起来好像是onclick=#{productBean.order}
(除了缺少的引号)。这可能是您遇到问题的原因。
答案 1 :(得分:0)
好的,我做到了。问题是该按钮可能显示为已启用(disabled="false")
,但其客户端更改和服务器不知道它,并且应用程序认为该按钮仍处于禁用状态。即使它看起来像启用按钮,它也无法与action="#{something}"
一起使用。
您必须让服务器知道更改。我所做的只是将@ViewScoped
添加到托管bean。现在,服务器也可以看到禁用和启用按钮的操作,并且工作正常。
但是我有一个问题。客户端验证是一个坏主意。禁用按钮是唯一阻止用户发送空itemValue或产品(在我的情况下)不可用(DB中为is_available = 0
)的按钮。问题是:是否足以确保它是安全的?
编辑:不幸的是,点击按钮后,即使oneSelectMenu转为第一个空值,按钮也会启用。更改列表后,它再次像以前一样工作,再次点击后,情况需要一段时间。