从javascript更新bean

时间:2015-02-22 23:46:38

标签: javascript jsf

我有一个.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;    
}

我忘记了什么吗?在此先感谢您的帮助!

2 个答案:

答案 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";
}