清除后会显示JSF inputText值

时间:2014-02-06 09:45:03

标签: jsf jsf-2 ajax4jsf

我必须验证h:inputText是否有值。因为我在该组件上使用required =“true”。它完成了这项工作并且有效,但随后发生了一些奇怪的事情。

当我将其留空时,会发生required =“true”。当我在inputText中键入一些文本时,不会发生required =“true”。当我在添加文本后删除文本时,发生了required =“true”,但之前输入的值重新出现在inputText中。

我真的不知道这可能是什么。请注意,当我说“required =”true“”发生时,我的意思是inputText的边框变为红色(参见代码)。

以下是代码:

<h:form id="generateLetterForm">
    <h:panelGroup id="submitterPanel">
        <h:panelGrid styleClass="rSplitPanel1" columns="1">
            <e:inputText entityBB="#{entityBB}" type="#{type}"
                property="submitterFirstName" />

            <e:inputText entityBB="#{entityBB}" type="#{type}"
                property="submitterLastName" />
        </h:panelGrid>
        <h:panelGrid styleClass="rOnePanel" columns="1">
            <h:panelGroup>
                <h:outputText value="#{AppMessages[type.concat('.address')]}"
                    styleClass="Fieldname" />
                <h:panelGrid columns="3" cellpadding="2" cellspacing="0"
                    styleClass="Fieldcontent"
                    columnClasses="rAddressStreet, rAddressStreetNr, rAddressBoxNr">
                    <h:panelGroup>
                        <h:inputText id="submitterStreetName"
                            value="#{entityBB.entity.address.street}" required="true" styleClass="#{component.valid ? '' : 'addressError'}" />
                        <rich:tooltip target="submitterStreetName">
                            <h:outputText
                                value="#{AppMessages[type.concat('.submitterStreetName')]}" />
                        </rich:tooltip>
                    </h:panelGroup>

"2 other similar columns" (would make code to complex for the problem) 

                </h:panelGrid>
            </h:panelGroup>
        </h:panelGrid>
    </h:panelGroup>

    <a4j:commandButton value="#{AppMessages['general.action.save']}"
    actionListener="#{entityBB.createStandardLetter()}"
    render="generateLetterForm messages letterExistsPanel"
    status="ajaxStatus" styleClass="floatRight"/>


</h:form>

编辑:前2个输入文本字段(e:inputText)是我自己的组件。没有什么不对。

支持bean是ViewScoped

2 个答案:

答案 0 :(得分:1)

当您正确输入表单时,该值将存储在ViewScoped bean的属性中。然后,当您错误地输入表单时,“处理验证”阶段将抛出错误,这意味着不会执行“更新模型值”阶段,因此ViewScoped bean中的值仍然是您输入时输入的原始值。正确地形成,并且在渲染视图时重新显示此值。

答案 1 :(得分:0)

找到问题虽然没有修复,因为可能的修复(将context-param设置为false)可能不会发生。我猜这种行为可以被视为JSF中的一个错误?

在web xml中:

<context-param> 
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-n‌​ame> 
    <param-value>false</param-value> 
</context-param>