Aşağıda basit bir formun kullanıldığı sayfa görülmektedir:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<h:form id="mainForm">
<h:panelGroup id="dynaFormGroup">
<p:messages id="messages" showSummary="true" />
<p:outputLabel id="messageLabel" value="#{dynaFormTestBean.message}"
style="white-space: pre;"></p:outputLabel>
<pe:dynaForm id="dynaForm" value="#{dynaFormTestBean.model}"
var="data" columnClasses="label-container, field-container">
<pe:dynaFormControl type="input" for="txt">
<p:inputText id="txt" value="#{data.value}" />
</pe:dynaFormControl>
<f:facet name="buttonBar">
<p:commandButton value="Submit"
action="#{dynaFormTestBean.submitForm}" process="dynaForm"
update=":mainForm:dynaFormGroup"/>
<p:commandButton type="reset" value="Reset"
style="margin-left: 5px;" />
</f:facet>
</pe:dynaForm>
</h:panelGroup>
</h:form>
</ui:composition>
dynaFormBean ise aşağıdaki gibidir :
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
import org.primefaces.context.RequestContext;
import org.primefaces.extensions.model.dynaform.DynaFormControl;
import org.primefaces.extensions.model.dynaform.DynaFormLabel;
import org.primefaces.extensions.model.dynaform.DynaFormModel;
import org.primefaces.extensions.model.dynaform.DynaFormRow;
@Named
@ViewScoped
public class DynaFormTestBean implements Serializable {
private Map<String, Property> map = new HashMap<>();
private DynaFormModel model;
private String message = "";
@PostConstruct
public void init() {
map.put("Ad", null);
map.put("Soyad", null);
map.put("Yas", null);
model = new DynaFormModel();
for (Entry entry : map.entrySet()) {
DynaFormRow row = model.createRegularRow();
DynaFormLabel label = row.addLabel(entry.getKey().toString(), 1, 1);
Property p = new Property(entry.getKey().toString(), null, true);
DynaFormControl control = row.addControl(p, "input", 1, 1);
label.setForControl(control);
}
}
public void submitForm() {
FacesMessage.Severity sev = FacesContext.getCurrentInstance().getMaximumSeverity();
boolean hasErrors = sev != null && FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0;
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.addCallbackParam("isValid", !hasErrors);
StringBuilder sb = new StringBuilder();
for (DynaFormControl dynaFormControl : model.getControls()) {
Property property = (Property) dynaFormControl.getData();
sb.append(property.getName()).append(":").append(property.getValue()).append("\n");
}
setMessage(sb.toString());
}
public DynaFormModel getModel() {
return model;
}
public void setModel(DynaFormModel model) {
this.model = model;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Form submit edildiğinde (submitForm() metodu) DynaFormModel'den gerekli olan değerler alınıp, mesaj değişkeni set edilmektedir. Nesneler önce Map'e koyulmuş sonra model'e verilmiştir.
Property sınıfı ise basit bir get/set olan bir sınıftır.