我有一个CRUD生成创建表单:
<div class="create-form">
<h:form>
<h:inputText id="name" value="#{pointController.selected.name}" title="#{bundle.CreatePointTitle_name}" required="true" />
<h:inputText id="term" value="#{pointController.selected.term}" title="#{bundle.CreatePointTitle_term}" required="true" />
<p:commandButton styleClass="btn" action="#{pointController.create}" value="#{bundle.CreatePointSaveLink}" />
</h:form>
</div>
<button>add new form</button>
我有一个按钮,如果点击它将使用javascript创建另一个与上面相同的表单。 (2 inputText,名称和术语)
我的目标是,使用2个或更多表单,根据用户需要的表单数量,单击1个commandButton,它将在数据库中插入所有内容。
示例:
first form: name = first form test, term = first form testterm
2nd form: name = 2nd form test, term= 2nd form testterm
单击命令按钮后
将在数据库的同一个表中插入2行。
但我不确定这个页面的结构是什么。
答案 0 :(得分:1)
您无法使用JSF组件在单个请求中从多个表单发送数据,您应该序列化所有数据并手动发送。最好有一个List<Item>
,每次点击按钮,它都会在列表中创建一个新项目并更新UIContainer
,显示列表中的项目。
这将是上述的一个开始例子:
@ManagedBean
@ViewScoped
public class ItemBean {
private List<Item> lstItem;
public ItemBean() {
lstItem = new ArrayList<Item>();
addItem();
}
//getters and setter...
public void addItem() {
lstItem.add(new Item());
}
public void saveData() {
//you can inject the service as an EJB or however you think would be better...
ItemService itemService = new ItemService();
itemService.save(lstItem);
}
}
JSF代码(仅<h:body>
内容):
<h:form id="frmItems">
<h:panelGrid id="pnlItems">
<ui:repeat value="#{itemBean.lstItem}" var="item">
Enter item name
<h:inputText value="#{item.name}" />
<br />
Enter item description
<h:inputText value="#{item.description}" />
<br />
<br />
</ui:repeat>
</h:panelGrid>
<p:commandButton value="Add new item" action="#{itemBean.addItem}"
update="pnlItems" />
<p:commandButton value="Save data" action="#{itemBean.saveData}" />
</h:form>