gpt4 book ai didi

jsf-2 - 在 JSF 中添加人脸消息时,我的操作未执行?

转载 作者:行者123 更新时间:2023-12-04 21:49:53 25 4
gpt4 key购买 nike

我有以下支持 bean:

@ViewScoped
@ManagedBean
public class WeighFamilyBacking2 implements Serializable {

private static final long serialVersionUID = 1L;
private String[] children = new String[] { "Child1", "Child2", "Child3" };
private HashMap<String, Integer> newWeights;

public WeighFamilyBacking2() {
newWeights = new HashMap<String, Integer>();
for (String s : getChildren())
newWeights.put(s, new Integer(0));
}

public void distributeWeightsWithoutMessage(ActionEvent event) {
for (String s : newWeights.keySet()) {
newWeights.put(s, newWeights.get(s) + 1);
}
}

public void distributeWeights(ActionEvent event) {
for (String s : newWeights.keySet()) {
newWeights.put(s, newWeights.get(s) + 1);
}

FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Succesful", "Weights redistributed."));
}

public HashMap<String, Integer> getNewWeights() {
return newWeights;
}

public List<String> getChildren() {
return Arrays.asList(children);
}
}

...以及以下 xhtml 页面:
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<h:form>
<ui:repeat var="child" value="#{weighFamilyBacking2.children}">
<h:outputText value="#{child}" />
<h:outputText value="#{weighFamilyBacking2.newWeights[child]}" /> -
<h:outputText value="#{weighFamilyBacking2.newWeights[child]}" /> -
<h:inputText id="oz" value="#{weighFamilyBacking2.newWeights[child]}" />
<h:inputText id="lbs"
value="#{weighFamilyBacking2.newWeights[child]}" />
<br />
</ui:repeat>

<h:commandButton
actionListener="#{weighFamilyBacking2.distributeWeights}"
value="Redistribute" />


<h:commandButton
actionListener="#{weighFamilyBacking2.distributeWeightsWithoutMessage}"
value="Redistribute Without Message" />
</h:form>
</h:body>
</html>

这是一个简单的可重现的测试用例。当您单击没有消息的重新分发时,事情会按预期进行。当您单击重新分发按钮时,它会显示成功消息,但不会更新输入字段。但是,文本输出字段仅更新一次。

我试过在两个按钮上使用immediate=true,这不会影响到这一点。这是一个非常简单的案例,我不明白为什么它不起作用。

我已经在所有最新版本的 Mojarra 包括 2.1.3 上尝试过这个。

最佳答案

这是另一个 <ui:repeat>异常。我还没有确定确切的根本原因,以便我可以检查这是否已经报告给 JSF guys并在必要时报告它,但我可以说当我更换 <ui:repeat> 时它可以工作来自 <h:dataTable> .

<h:dataTable var="child" value="#{weighFamilyBacking2.children}">
<h:column>
<h:outputText value="#{child}" />
<h:outputText value="#{weighFamilyBacking2.newWeights[child]}" /> -
<h:outputText value="#{weighFamilyBacking2.newWeights[child]}" /> -
<h:inputText id="oz" value="#{weighFamilyBacking2.newWeights[child]}" />
<h:inputText id="lbs"
value="#{weighFamilyBacking2.newWeights[child]}" />
</h:column>
</h:dataTable>

也许是 <table>对你来说在语义上不正确。如果这真的不受欢迎,您可能需要检查它是否与 Tomahawk 的 <t:dataList> 一起工作没有问题。 , RichFaces' <rich:dataList> , PrimeFaces' <p:dataList>等,每个都支持在没有额外标记的情况下渲染子项。

更新:我举报为 issue 2157 .

关于jsf-2 - 在 JSF 中添加人脸消息时,我的操作未执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880760/

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