Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF输出标签清除_Jsf_Label_Output - Fatal编程技术网

JSF输出标签清除

JSF输出标签清除,jsf,label,output,Jsf,Label,Output,我有以下问题。当我只提供PIN时,我使用表单。我有一个验证器,可以检查它是否是4位数字。然后将提交操作设置为检查数据库中是否存在PIN的方法。如果没有,则显示消息=“无PIN”;我在表单下面的输出标签中使用了消息。以前它是空的,所以那里没有消息。现在它变为“无PIN”,但我必须在再次单击submit按钮后清除它,因为当您输入例如“12as”PIN时,错误消息不会消失,validator会处理它。我应该如何实施这种情况?也许在这种情况下使用输出标签是错误的想法?您可以在验证器之外使用JSF消息组件

我有以下问题。当我只提供PIN时,我使用表单。我有一个验证器,可以检查它是否是4位数字。然后将提交操作设置为检查数据库中是否存在PIN的方法。如果没有,则显示消息=“无PIN”;我在表单下面的输出标签中使用了消息。以前它是空的,所以那里没有消息。现在它变为“无PIN”,但我必须在再次单击submit按钮后清除它,因为当您输入例如“12as”PIN时,错误消息不会消失,validator会处理它。我应该如何实施这种情况?也许在这种情况下使用输出标签是错误的想法?

您可以在验证器之外使用JSF消息组件: 要在表单中输入消息,请执行以下操作:

 <h:message for="PIN"/> 

此处无需使用outputLabel。

您可以在验证程序之外使用JSF消息组件: 要在表单中输入消息,请执行以下操作:

 <h:message for="PIN"/> 

此处无需使用outputLabel。

您不应在action方法中执行验证。您应该使用真正的验证器

只需相应地实现接口。例如

@FacesValidator("pinValidator")
public class PinValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String pin = (String) value;

        if (pin == null || pin.isEmpty()) {
            return; // Let required="true" deal with it if necessary.
        }

        if (!pin.matches("\\d{4}")) {
            throw new ValidatorException(new FacesMessage("PIN must be 4 digits"));
        }

        if (!somePinService.exists(pin)) {
            throw new ValidatorException(new FacesMessage("PIN is unknown"));
        }    
    }

}
按如下方式使用:

<h:outputLabel for="pin" value="PIN" />
<h:inputText id="pin" value="#{bean.pin}" validator="pinValidator" />
<h:message for="pin" />

验证程序异常的faces消息将在与启动验证程序的组件相关联的
中结束

如果您使用ajax提交表单,请不要忘记确保在ajax渲染中也考虑了该消息



与具体问题无关,JSF
生成一个HTML
元素,该元素旨在(例如
等)。它绝对不是为了显示任意文本,比如验证消息。我建议暂时把JSF放在一边,然后开始。通过这种方式,您将更好地了解选择哪些JSF组件来获得所需的HTML输出。

您不应该在action方法中执行验证。您应该使用真正的验证器

只需相应地实现接口。例如

@FacesValidator("pinValidator")
public class PinValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String pin = (String) value;

        if (pin == null || pin.isEmpty()) {
            return; // Let required="true" deal with it if necessary.
        }

        if (!pin.matches("\\d{4}")) {
            throw new ValidatorException(new FacesMessage("PIN must be 4 digits"));
        }

        if (!somePinService.exists(pin)) {
            throw new ValidatorException(new FacesMessage("PIN is unknown"));
        }    
    }

}
按如下方式使用:

<h:outputLabel for="pin" value="PIN" />
<h:inputText id="pin" value="#{bean.pin}" validator="pinValidator" />
<h:message for="pin" />

验证程序异常的faces消息将在与启动验证程序的组件相关联的
中结束

如果您使用ajax提交表单,请不要忘记确保在ajax渲染中也考虑了该消息



与具体问题无关,JSF
生成一个HTML
元素,该元素旨在(例如
等)。它绝对不是为了显示任意文本,比如验证消息。我建议暂时把JSF放在一边,然后开始。通过这种方式,您将更好地了解选择哪些JSF组件来获得所需的HTML输出。

请发布您的代码(也在这里:)请发布您的代码(也在这里:),但有一个问题。我的isCorrectPIN()方法还从数据库中获取用户名并将其写入bean。我无法从验证器中写入任何内容。我的代码有另一个问题,我将代码发布在其他主题中。这是你看到代码时的链接:我在WaiteBean中扩展了Connector类,所以我不能以静态方式使用该方法。我也不想创建到sql的查询——一个用于名称更新,一个用于PIN验证。我使用onclick方法重置标签,但我不确定我是否应该这样做,只需在bean的action方法中完成业务工作。如果验证失败,则不会调用它。如果你继续这样做并使用Ozan的方法,你只是在做一个不好的练习。但是有一个问题。我的isCorrectPIN()方法还从数据库中获取用户名并将其写入bean。我无法从验证器中写入任何内容。我的代码有另一个问题,我将代码发布在其他主题中。这是你看到代码时的链接:我在WaiteBean中扩展了Connector类,所以我不能以静态方式使用该方法。我也不想创建到sql的查询——一个用于名称更新,一个用于PIN验证。我使用onclick方法重置标签,但我不确定我是否应该这样做,只需在bean的action方法中完成业务工作。如果验证失败,则不会调用它。如果你继续这样做并使用Ozan的方法,你只是在做一个不好的练习。我按照你说的做了,它起了作用,但没有出现在信息中。它以橙色显示在下面。可能是因为我对验证器输出使用了相同的消息?您可以为提交按钮添加新消息。另外,橙色可能来自FacesMessage.SEVERITY\u警告,您可以更改严重性。我按照您所说的做了,它可以工作,但它没有出现在消息中。它以橙色显示在下面。可能是因为我对验证器输出使用了相同的消息?您可以为提交按钮添加新消息。此外,橙色可能来自FacesMessage.SEVERITY\u警告,您可以更改严重性。