我对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;
}
}
该代码不起作用。任何人都可以帮助我吗?
由于
答案 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>
<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。
另见: