【发布时间】:2014-03-25 05:56:04
【问题描述】:
根据我的场景,需要先调用javascript。在 javascript 调用之后,两个隐藏的值将被更新。使用更新的隐藏值,必须调用 Bean 方法。在这种情况下,我同时被称为 javascript 和 bean 方法。所以在我的 bean 方法中,我没有在隐藏字段中获取更新的值。
小细节说明
Textbox(address) 用于输入地址。并有两个隐藏元素,用于根据地址字段存储街道名称和城市名称。
通过 Javascript 调用,从 google maps API (codeAddress()) 收集两个值(街道名称和城市名称)。根据在文本框中输入的地址更新两个隐藏字段(街道和城市)。 Bean 方法必须处理更新后的隐藏值。
但是从我的代码中,Backing bean 和 java 脚本是同时被调用的。所以我没有在支持 Bean 中获得更新的值。
我的代码如下:
JSF 代码
<h:form prependId="false">
<div id="panel-one">
<h:outputLabel value="ADDRESS"/>
<h:inputText type="text" id="address" size="40" value="#{Bean.address}"/>
<h:inputHidden id="street" value="#{Bean.streetName}" />
<h:inputHidden id="city" value="#{Bean.city}" />
<h:commandButton type="submit" value="Verify Address"
onclick="checkAddress()">
<f:ajax execute="@form" render="@none" listener="#{Bean.checkAddress()}"/>
</h:commandButton>
</div>
</h:form>
Javascript
checkAddress() {
document.getElementById("street").value = //Setting value from other javascript API;
document.getElementById("city").value = //Setting value from other javascript API;
}
在上面的 javascript 中收集值并使用两个文本框进行设置。随着更新的值再次调用支持 bean 中的 checkAddress() 方法。 仅供参考: *checkAddress()* 是 AJAX 调用。我在 JSF 的 h:commandButton 中犯了错误,但不知道如何修复它。非常感谢任何帮助。
【问题讨论】:
-
你为什么不直接删除“actionListener”属性,然后对验证器做同样的事情呢?或者在提交方法中移动该逻辑。
-
@mitpatoliya:你能解释一下吗?提交方法是什么意思?
-
@mitpatoliya :从 commandButton 中删除了 actionListener 属性,并将 listener 属性放置在 ajax 标记中。结果还是一样。是你想说的吗?
-
既然您需要在用户点击时从 javascript 中填充您的 bean 数据,您为什么不尝试将您的数据从 js 传递到 backing bean?
-
但是primefaces是可以的,如果你仍然感兴趣,那么你可以使用本文中的方法:stackoverflow.com/questions/18975746/…安全性肯定取决于你的实现。
标签: jsf jsf-2 event-handling jsf-2.2