跳过验证阶段但需要更新模型值

时间:2014-04-24 10:54:24

标签: java validation jsf icefaces

JSF代码。 <ice:inputText id="txtemailFrom" required="true" requiredMessage="please enter proper value in From Address field" value="#{emailBean1.sender}" maxlength="100" size="40"> <f:validator validatorId="emailValidator" /> </ice:inputText>

<ice:selectOneRadio id="emailType" 
                value="#{emailBean1.currentEmailType}"
                valueChangeListener="#{emailBean1.onEmailTypeChange}"
                partialSubmit="true"
                style="margin-left:95px">

                <f:selectItem itemLabel="Do Not Reply" />
                <f:selectItem itemLabel="User's Email" />
                <f:selectItem itemLabel="Custom Email" />

            </ice:selectOneRadio>

验证器的java代码:

public void onEmailTypeChange(ValueChangeEvent event) {

    logger.debug(new LogEntry(" EmailBean.onEmailTypeChange() execution is started."));
    String emailType = event.getNewValue().toString();
    FacesContext context = FacesContext.getCurrentInstance();
    this.setUserEmailId(roleHandler.getUserId() + "@xxx.com");
    HtmlInputText txtComponent = (HtmlInputText) Utils.findComponent(
            context.getViewRoot(), "txtemailFrom");

    if (emailType.equals("Do Not Reply")) {
        this.setEmailFrom("donotreply@fedex.com");
        txtComponent.setValue("donotreply@fedex.com");
    } else if (emailType.equals("User's Email")) {
        this.setEmailFrom(this.getUserEmailId());
        txtComponent.setValue(this.getUserEmailId());
    } else if(emailType.equals("Custom Email")){
        this.setEmailFrom("");
        txtComponent.setValue("");
    }
    logger.debug(new LogEntry(
            " EmailBean.onEmailTypeChange() execution is ended."));
}

当我更改单选按钮值时,它正在更新fromEmailaddress的inputTextField中的值。我正在使用此代码通过java更新值。

HtmlInputText txtComponent = (HtmlInputText) Utils.findComponent(
            context.getViewRoot(), "txtemailFrom");

但我的问题就像我在更改单选按钮时使用输入文本字段的验证器,如果电子邮件无效,则其失败并显示错误消息..它按照jsf方法工作但是根据我的要求它应该更改电子邮件inputTextFied中的值..我尝试立即=“true”然后跳过验证阶段,但它没有将值更新到Emailtextfield。

2 个答案:

答案 0 :(得分:0)

在复选框中尝试使用Immediate ='true'。 如果你把immediate ='true',它将不会验证该字段,它会将值提交到服务器。

答案 1 :(得分:0)

您可以尝试使用自定义验证程序。然后,您甚至可以在验证发生之前更新模型。这是我用于相同目的的代码片段:

validate(FacesContext ctx, UIComponent comp, Object val) {
    ValueExpression ve = ((UIInput) comp).getValueExpression("value");
    ve.setValue(ctx.getELContext(), val);
    // your validation logic...
}

希望它有所帮助!