Java JF2动态表单元素不';我不记得每次添加元素时输入和页面都会刷新
我正在尝试创建一个带有添加行选项的表单。但是,在我键入一些输入并再次单击“添加”按钮后,我输入的输入将消失。我不确定我的代码出了什么问题。此外,当我单击add按钮时,页面将刷新。有没有办法停止此页面刷新 Person.javaJava JF2动态表单元素不';我不记得每次添加元素时输入和页面都会刷新,java,forms,dynamic,jsf-2,Java,Forms,Dynamic,Jsf 2,我正在尝试创建一个带有添加行选项的表单。但是,在我键入一些输入并再次单击“添加”按钮后,我输入的输入将消失。我不确定我的代码出了什么问题。此外,当我单击add按钮时,页面将刷新。有没有办法停止此页面刷新 Person.java public class Person{ private List<String> guys = new ArrayList<String>(); public List<String> getGuys() { re
public class Person{
private List<String> guys = new ArrayList<String>();
public List<String> getGuys() {
return guys;
}
public void setGuys(List<String> guys) {
this.guys = guys;
public void addNewItem(){
guys.add("");
}
}
公共类人物{
private List guys=new ArrayList();
公共列表getGuys(){
回头客;
}
公共部门人员(列出人员){
这个。伙计们=伙计们;
public void addNewItem(){
加上(“”);
}
}
form.xhtml
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Guys: " />
<h:dataTable value="#{person.guys}" var="men">
<h:column>
<p:inputText value="#{men}" />
</h:column>
</h:dataTable>
<h:commandButton name="add" value="Add" action="#{person.addNewItem}" />
</h:panelGrid>
<br />
<h:commandButton name="submit" type="submit" value="Submit"></h:commandButton>
</h:form>
<h:form id="frmPrincipal">
<h:panelGrid columns="2">
<h:outputText value="Guys: " />
<h:dataTable value="#{person.guys}" var="men" binding="#{person.dtGuys}" >
<h:column>
<p:inputText value="#{men}" valueChangeListener="#{person.addToList}" />
</h:column>
</h:dataTable>
<h:commandButton name="add" value="Add" action="#{person.addNewItem}" />
</h:panelGrid>
<br />
<h:commandButton id="submit" name="submit" value="Submit" action="#{person.save}"/>
</h:form>
这是因为您没有该bean的作用域,所以它的请求作用域是有限的,所以当您调用操作时,会再次创建该bean,您可以使用sessionScope或conversationScope解决此问题如果您从不更新列表,您只是添加空项。您应该执行以下操作:
Person.java(可视范围)
public类Person实现可序列化{
private List guys=new ArrayList();
私有HTMLDATABLE DTGYES;
public void addNewItem(){
加上(“”);
}
公共无效添加列表(ValueChangeEvent e){
set(dtGuys.getRowIndex(),e.getNewValue().toString());
}
公共字符串保存(){
System.out.println(“保存…”);
用于(字符串项:guys){
System.out.println(“项=”+项);
}
返回null;
}
//盖特和塞特
}
form.xhtml
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Guys: " />
<h:dataTable value="#{person.guys}" var="men">
<h:column>
<p:inputText value="#{men}" />
</h:column>
</h:dataTable>
<h:commandButton name="add" value="Add" action="#{person.addNewItem}" />
</h:panelGrid>
<br />
<h:commandButton name="submit" type="submit" value="Submit"></h:commandButton>
</h:form>
<h:form id="frmPrincipal">
<h:panelGrid columns="2">
<h:outputText value="Guys: " />
<h:dataTable value="#{person.guys}" var="men" binding="#{person.dtGuys}" >
<h:column>
<p:inputText value="#{men}" valueChangeListener="#{person.addToList}" />
</h:column>
</h:dataTable>
<h:commandButton name="add" value="Add" action="#{person.addNewItem}" />
</h:panelGrid>
<br />
<h:commandButton id="submit" name="submit" value="Submit" action="#{person.save}"/>
</h:form>
使用JSF2.0.10和primefaces 3.5,如果bean被放置在功能需求的正确范围内,视图范围内,剩下的唯一一个主要错误是,您期望
字符串
类有一些神奇的setter方法
它没有。字符串
类是不可变的。以下内容在字符串
上永远不会起作用:
您有两种选择:
(注意:表不需要额外的bean属性!代码按原样)
这基本上是一个person.getGuys().add(table.getRowIndex(),submittedValue)
。也就是说,setter是在列表
本身上调用的,它工作得非常好。另请参见以下有关ui:repeat
的相关答案:
谢谢!效果很好。你知道如何在不刷新页面的情况下添加新行吗?我想我应该使用ajax,但我不确定如何使用。我是否创建一个未呈现的输入文本,然后在我想添加另一行时呈现它?只需在
中嵌套
,或者用
替换
。将来,p请在这里单独提问。对不起。下次我会问的。非常感谢!