使用jsf中的ajax将文本框的值复制到另一个文本框

时间:2013-07-18 11:38:31

标签: ajax jsf

我对ajax很新,并试图将一个盒子的值复制到另一个盒子。这是我的代码:

 <h:form>
        <h:inputText value="#{ajaxBean.name}">
            <f:ajax render="otherbox" execute="@this" event="keyup"></f:ajax>
        </h:inputText>
        <h:inputText id="otherbox" value="#{ajaxBean.name}"></h:inputText>
 </h:form>

豆子

@Named(value = "ajaxBean")
@Dependent
public class AjaxBean {

public AjaxBean() {
}


private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

该代码不起作用。任何人都可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:1)

我认为你正在混淆JSF和CDI。 @Dependent表示bean在依赖的伪范围内(无论如何都是CDI-beans的默认范围),因此每次发出请求时,bean都将被重新绑定,并且bean不能保持任何状态。查看here以获取范围的解释,尤其是依赖范围的用途。

首先,你必须使用一些不同的范围,@ RequestScoped应该足以完成你的任务。由于我在这里没有看到任何CDI的使用,使用@ManagedBean而不是@Named - 所以bean的默认范围将是请求范围。

试试这个:

@ManagedBean
public class AjaxBean {
    ...
}

答案 1 :(得分:1)

您的问题不是关于Ajax或JSF。这是一个JavaScript问题。

您可以使用JavaScript访问和修改项目。

<h:head></h:head>

之间添加此JavaScript代码
<script>
function copyField()
{   
    document.getElementById("field2").value = document.getElementById("field1").value;  
}
</script>

和你的页面:

<h:form id="myform" prependId="false">
        <h:inputText id="field1" value="#{myBean.name}" onkeyup="copyField();" />
        <h:inputText id="field2" value="#{myBean.name}"></h:inputText>
 </h:form>

注意prependId =“false”以避免混合ID。

另见:

JSF: Why prependId = false in a form?