仅当所有其他组件都没有错误时才启用JSF命令按钮

时间:2011-02-16 23:30:23

标签: jsf icefaces faces-config

我在申请中使用icefaces。 页面中有一个表单,其中包含几个输入字段。

我想只在字段有效时启用命令按钮(其他组件没有错误)

有可能吗?

示例代码

<ice:form>
<ice:panelGrid  columns="2">
    <ice:outputLabel>Enter Date</ice:outputLabel>
        <ice:panelGroup>
            <ice:selectInputDate renderAsPopup="true" id="InputDate" value="#{Bean.FormDate}" partialSubmit="true" ></ice:selectInputDate> 
                <ice:message for="InputDate" />
        </ice:panelGroup>

     <ice:outputLabel>Days</ice:outputLabel>
        <ice:panelGroup>
            <ice:inputText value="#{Bean.days}"partialSubmit="true" id="inputDays">
                <f:validateLongRange minimum="1" maximum="10"/>
            </ice:inputText>
                <ice:message for="inputDays"/>
            </ice:panelGroup>

    <ice:commandButton value="Submit" action="#{Bean.SomeAction}"></ice:commandButton>
</ice:panelGrid>

在上面的代码中,我只想在日期和日期有效时启用提交命令按钮(没有排队的任何错误。

3 个答案:

答案 0 :(得分:1)

如果你使用的是jsf 2.0,你可以这样做:

    <ice:form>
        <ice:panelGrid columns="2">
            <ice:outputLabel>Enter Date</ice:outputLabel>
            <ice:panelGroup>
                <ice:selectInputDate renderAsPopup="true" id="InputDate"
                    value="#{Bean.FormDate}" partialSubmit="true"
                    binding="#{inputDateComponent}">
                    <f:ajax execute="@this" render="submit inputDateMessage" />
                </ice:selectInputDate>
                <ice:message id="inputDateMessage" for="InputDate" />
            </ice:panelGroup>

            <ice:outputLabel>Days</ice:outputLabel>
            <ice:panelGroup>
                <ice:inputText value="#{Bean.days}" partialSubmit="true"
                    id="inputDays" binding="#{inputDaysComponent}">
                    <f:validateLongRange minimum="1" maximum="10" />
                    <f:ajax execute="@this" render="submit inputDaysMessage" />
                </ice:inputText>
                <ice:message id="inputDaysMessage" for="inputDays" />
            </ice:panelGroup>

            <ice:commandButton id="submit" value="Submit"
                action="#{Bean.SomeAction}"
                disabled="#{!inputDateComponent.valid}" />
        </ice:panelGrid>
    </ice:form>

我没有测试过这个具体的例子,但你可以看到我要去的地方。输入字段将在更改时进行评估,并显示验证错误或创建未禁用commandButton的条件。

如果您希望仅在输入字段有效时才显示按钮,您还可以使用rendered =并进行正断言。

答案 1 :(得分:0)

您可以使用此处所述的阶段监听器:

http://balusc.blogspot.com/2007/12/set-focus-in-jsf.html

此示例中的阶段侦听器使用附加了消息的client-id构建一个字符串。检查bean中的这个字符串,并根据是否有带有消息的id来创建bean属性。

然后,您可以根据bean属性启用命令按钮。

答案 2 :(得分:0)

将每个输入字段切换为'immediate =“true”'并在字段中添加验证器。

让验证器设置/取消设置一个布尔值,以确定字段是否包含有效数据,并按照sparrowhawk的建议进行操作,并在提交按钮的渲染表达式中测试此布尔值。