Java jsf(richfaces)只读输入文本验证

Java jsf(richfaces)只读输入文本验证,java,validation,jsf,jakarta-ee,richfaces,Java,Validation,Jsf,Jakarta Ee,Richfaces,是否有任何方法可以验证一个jsf输入文本,该文本是只读的,但在触发一些其他事件时该值会发生更改?您很可能需要直接从事件手动调用验证逻辑。下面是IBM提供的JSF生命周期模型 您将注意到,流程验证阶段发生在通常处理事件的调用应用程序阶段之前。这会在很长一段时间后发生,因此验证不会自动发生。在评论中回答:“在jsf页面支持bean中验证它不是更容易吗?” 您可以在按钮单击或类似事件上执行应用程序级验证。您可以在支持bean中执行类似的操作,并将其链接到事件 public String login(

是否有任何方法可以验证一个jsf输入文本,该文本是只读的,但在触发一些其他事件时该值会发生更改?

您很可能需要直接从事件手动调用验证逻辑。下面是IBM提供的JSF生命周期模型


您将注意到,流程验证阶段发生在通常处理事件的调用应用程序阶段之前。这会在很长一段时间后发生,因此验证不会自动发生。

在评论中回答:“在jsf页面支持bean中验证它不是更容易吗?” 您可以在按钮单击或类似事件上执行应用程序级验证。您可以在支持bean中执行类似的操作,并将其链接到事件

public String login(){
        FacesContext context = FacesContext.getCurrentInstance();
        if(**<<some validation for value in field 'firstName' in form 'userForm'>>**){
            FacesMessage message = new FacesMessage();
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary("Some Valication check");
            message.setSummary("Some Valication check!!");
            context.addMessage("userForm:firstName", message);//adds validation message for field firstName in form userForm
            return "ERROR";
        }
        return "SUCCESS";
    }
公共字符串登录(){
FacesContext context=FacesContext.getCurrentInstance();
如果(****){
FacesMessage message=新的FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_错误);
message.setSummary(“一些有效性检查”);
message.setSummary(“一些有效性检查!!”);
addMessage(“userForm:firstName”,message);//为表单userForm中的字段firstName添加验证消息
返回“错误”;
}
返回“成功”;
}

希望这能有所帮助。

我已经通过一个变通方法解决了这个问题。我添加了一个
inauthidden
字段,该字段具有
required
属性
true
,该属性不会出现在界面上,但将被验证:

<h:inputHidden value="#{bean.value}" required="true"
                    requiredMessage="Data must be entered" />


bean.value的值被其他事件更改,并且在InAuthidden上的某个重新渲染器上进行验证。

仅在渲染响应阶段将
readonly
属性设置为
true
。这样,在渲染响应阶段之外的所有其他阶段中,它都不会被视为只读



在jsf页面支持bean中验证它不是更容易吗?我如何触发验证并发出验证消息?我已经添加了一个答案作为对评论的回复。干杯您是否通过JavaScript更改了值?功能需求到底是什么?@BalusC第一个组件inputText正在显示一些由第二个组件修改的值,这更复杂。我不想对第二个组件进行验证,因为它会更复杂。JSF不会更新
readonly=“true”
输入的模型值。另外,在action方法中而不是在普通验证器中执行valdation是一种糟糕的做法。@BalusC感谢您提供的信息:)我不知道为输入设置readonly=“true”不会更新模型值。至于在一个动作中进行验证,我知道这不是最好的实践,但我认为我们可能无法为只读输入添加普通的验证器。在我的例子中, {FaseFrace.ReDeReRe}}在绘制HTML时返回false(如果它在中间打印)。无论如何,它的工作方式是{facesContext.currentPhaseId.ordinal eq 6}`。莫哈拉2.1.9。