gpt4 book ai didi

java - 如何从 SiteBean 中的 `UIInput` 获取 `ui:repeat`?

转载 作者:行者123 更新时间:2023-11-30 11:48:11 26 4
gpt4 key购买 nike

我正在尝试验证 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com