我有一个.xhtml页面,我从中启动了一个javascript,在这个javascript中我想更新bean的内容,我发现这样做的最简单方法是添加一个隐藏的表单并链接所说的bean&# 39; s属性值:
的index.xhtml
<h:form id="poi-form" styleClass="invisible">
<h:inputHidden id="poi" value="#{userBean.email}" />
</h:form>
javascriptfile.js
function handleEmailResponse(resp) {
document.getElementById('poi-form:poi').value = 'usersNewEmailValue';
window.location.replace("timeline.xhtml");
}
但是,从timeline.xhtml开始,该值不是我预期的值(好像它没有更新),因为我看到用户设置的旧电子邮件值
userBean.java
@PostConstruct
public void init() {
email = "usersOldEmailValue;
}
我忘记了什么吗?在此先感谢您的帮助!
答案 0 :(得分:1)
您实际上忘记了提交表单,因此服务器端可以更新您的模型。
另外,如果您使用的是PrimeFaces,也可以使用p:remoteCommand。
答案 1 :(得分:0)
使用以下代码修复:
<强>的index.xhtml 强>
<h:form id="poi-form" styleClass="invisible">
<input type="text" id="poiemail" name="poiemail" />
<h:commandButton action="#{userBean.updateData()}" id="miAwesomeButton" value="I'm clicked by javascript"/>
</h:form>
<强> javascriptfile.js 强>
function handleEmailResponse(resp) {
document.getElementById('poiemail').value = 'usersNewEmailValue';
document.getElementById('poi-form:miAwesomeButton').click();
}
<强> userBean.java 强>
public String updateData() {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
this.email= request.getParameter("poiemail");
return "redirectURL";
}