0

我对 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;
}
}

该代码不起作用。谁能帮我?

谢谢

4

2 回答 2

1

我认为您正在混淆 JSF 和 CDI。@Dependent 说 bean 在依赖的伪范围内(无论如何都是 CDI bean 的默认范围),所以每次你发出请求时,bean 都会被重新实例化,并且 bean 不能保持任何状态。在这里查看范围的解释,尤其是依赖范围的用途。

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

尝试这个:

@ManagedBean
public class AjaxBean {
    ...
}
于 2013-07-18T12:37:20.287 回答
1

您的问题与 Ajax 或 JSF 无关。这是一个 JavaScript 问题。

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

在之间添加此 JavaScript 代码<h:head></h:head>

<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:为什么 prependId = false 在表单中?

于 2013-07-18T13:47:15.473 回答