gpt4 book ai didi

validation - Richfaces Datatable 在验证失败时丢失提交的输入值

转载 作者:行者123 更新时间:2023-12-03 20:45:35 25 4
gpt4 key购买 nike

我有两个输入 - 一个在“正常”h:dataTable 中,一个在 rich:dataTable 中 当我提交错误的值时,即验证失败, “正常”一个保留我提交的值,而第二个丢失它。请参阅以下代码片段(输入任何值并按下按钮):

受管Bean

@ManagedBean
@ViewScoped
public class TestController implements Serializable {

private static final long serialVersionUID = -484022507596298941L;

private String[] stringArray1 = {"Element 1", "Element 2"}; // + Getter
private String[] stringArray2 = {"Element A", "Element B"}; // + Getter
private Map<String, String> inputValues = new HashMap<String, String>(4); // + Getter

public TestController() {
inputValues.put(stringArray1[0], "");
inputValues.put(stringArray1[1], "");
inputValues.put(stringArray2[0], "");
inputValues.put(stringArray2[1], "");
}

public void doSomething() {
System.out.println("Did something");
}

public void validate(FacesContext facesContext, UIComponent uiComponent, Object value) {
throw new ValidatorException(new FacesMessage("This can never be valid."));
}
}

查看

<h:form>
<h1>h:dataTable</h1>
<h:dataTable id="table1" value="#{testController.stringArray1}" var="string" columnClasses="inactive">
<h:column>
<h:outputText value="#{string}:"/>
<h:inputText id="someInput" value="#{testController.inputValues[string]}" validator="#{testController.validate}"/>
<h:message for="someInput" id="msg" style="color: red;"/>
</h:column>
</h:dataTable>

<h1>rich:dataTable</h1>
<rich:dataTable id="table2" value="#{testController.stringArray2}" var="string">
<rich:column>
<h:outputText value="#{string}:"/>
<h:inputText id="someInput" value="#{testController.inputValues[string]}" validator="#{testController.validate}"/>
<h:message for="someInput" id="msg" style="color: red;"/>
</rich:column>
</rich:dataTable>

<h:commandButton id="button" action="#{testController.doSomething}" value="do something"/>
</h:form>

这是已知的 Richfaces 行为还是某种错误?有没有办法让它的行为与普通的 JSF-DataTable 一样?使用 h:dataTable 并不总是一种选择,丢失“我刚刚要纠正它”的输入是相当烦人的。

补充:我刚刚检查了 ui:repeat 和 a4j:repeat 的行为,它们是一样的:ui:repeat 保留提交的值,而 a4j:repeat 不保留提交的值。

更新:重新编写示例代码以排除评论中提到的一些可能的问题(输入字段现在指向不同的值;只有一个表单元素)。

在带有 RichFaces 4.3.7 和 JBoss AS 7 的 Mojarra 2.1.21 以及带有 RichFaces 4.5.0 Alpha3 和 JBoss Wildlfy 的 Mojarra 2.2.7 上测试 - 结果相同。

最佳答案

我刚刚使用 Richefaces 4.3.7 和 Mojarra 2.2.6 分别尝试了您页面的每个 form,它运行良好!我没有注意到任何异常行为,当验证失败时我没有丢失任何值。这意味着 Richfaces 组件没有验证问题。

但是,当在单个页面中使用这两种形式时,我注意到当我提交第一种形式时,第二种形式的 inputText 失去了它的值(value),而如果我们提交 form2 第一个表单的 inputText 没有失去它的值(value),我猜这是因为 JSF 将它的 HTML 组件的状态存储在 javax.faces.ViewState 并且对 Richfaces 组件不做同样的事情,使用 Firebug 您可以轻松验证这两个 POST 请求之间唯一通用的 request parameterjavax .faces.ViewState.

关于validation - Richfaces Datatable 在验证失败时丢失提交的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807283/

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