作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试验证 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>
bean 代码:
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>
不是 View 构建时间标签,而是 View 渲染时间标签。只有一个 <h:inputText>
View 树中的组件,由 frmMY:myRepeat:txtDatum
标识.然而,它被渲染了多次,与 <ui:repeat>
一样多迭代。如果您使用的是 <c:forEach>
,这是一个 View 构建时间标签,那么确实有多个<h:inputText>
View 中的组件,每个组件仅呈现一次。
您需要以不同的方式解决问题。 <c:forEach>
可能不是正确的解决方案,因为它可能会产生令人讨厌的“副作用”,具体取决于整个 View 和模型的设计方式。由于功能要求不明确并且需要在系统事件监听器中收集输入值没有任何意义(我想不出这种方法在现实世界中有任何合理的应用),我无法提出任何解决方法它不同而正确。我猜你只需要一个Validator
.
关于java - 如何从 SiteBean 中的 `UIInput` 获取 `ui:repeat`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986803/
我正在尝试验证 ui:repeat 中的多个组件。 如何从 SiteBean 中的 ui:repeat 获取 UIInput? JSF 代码是:
我是一名优秀的程序员,十分优秀!