我想驗證ui:repeat
中的多個組件。如何從SiteBean中的`ui:repeat`獲取`UIInput`?
如何在SiteBean中從ui:repeat
獲得UIInput
?
JSF代碼:
<f:event listener="#{siteBean.listenerMyListener}" type="preValidate" />
<ez:inputText id="txtMY" required="true" value="Hallo" />
<ui:repeat
id ="myRepeat"
var="item"
value="#{siteBean.myList}"
varStatus="status">
<ez:panel style="margin-bottom: 7px; #{status.even ? 'background-color: #E6EFC2;' : 'background-color: #e5f1fa;'}">
<h:messages for="hiddenValidation" />
<h:inputHidden id="hiddenValidation" value="" />
<h:outputText value="Rechnung vom:" />
<ez:inputText id="txtDatum" value="#{item.datum}"
style="width: 100px; text-align: right;">
<f:convertDateTime pattern="dd.MM.yyyy" />
</ez:inputText>
<br /><br />
<h:outputText value="Netto:" />
<ez:inputText id="txtNetto" required="true" value="#{item.netto}" style="width: 100px; text-align: right;">
<f:convertNumber pattern="###0.00" />
<f:validateBean />
</ez:inputText>
<br /><br />
<h:outputText value="Brutto:" />
<ez:inputText id="txtBrutto" required="true" value="#{item.brutto}" style="width: 100px; text-align: right;">
<f:convertNumber pattern="###0.00" />
</ez:inputText>
</ez:panel>
</ui:repeat>
豆代碼:
public void listenerMyListener(ComponentSystemEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
UIComponent components = event.getComponent();
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
UIInput search_txtMY = (UIInput) viewRoot.findComponent("frmMY:txtMY");
String value_txtMY = search_txtMY.getLocalValue().toString(); // Hallo
UIInput search_txtDatum = (UIInput) viewRoot.findComponent("frmMY:myRepeat:0:txtDatum"); // NULL
String value_txtDatum = search_txtDatum.getLocalValue().toString(); // java.lang.NullPointerException
}
據我所知,''內的組件不會被複制到JSF樹中。換句話說,你的'txtDatum'只有一個'UIInput'對象,它用於渲染所有的迭代。 –
DRCB
@DRCB謝謝。 – edze