【发布时间】:2012-02-17 16:45:03
【问题描述】:
我正在尝试验证 ui:repeat 中的多个组件。
如何从 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
}
【问题讨论】:
-
据我了解,
<ui:repeat>中的组件不会复制到 JSF 树中。换句话说,您的“txtDatum”只有一个UIInput对象,它用于渲染所有迭代。
标签: java jakarta-ee jsf-2