jsf(richfaces)只读输入文本验证[重复]
Posted
技术标签:
【中文标题】jsf(richfaces)只读输入文本验证[重复]【英文标题】:jsf (richfaces) readonly input text validation [duplicate] 【发布时间】:2012-03-25 18:16:48 【问题描述】:有什么方法可以验证只读的 jsf 输入文本,但在触发其他一些事件时值会更改?
【问题讨论】:
在jsf页面backing bean中验证不是更简单吗? 以及如何触发验证并发出验证消息? 我添加了一个答案作为对评论的回复。干杯 您是否正在通过 javascript 更改值?功能需求究竟是什么? @BalusC 第一个组件 inputText 正在显示一些由第二个组件修改的值,这更复杂。我不想对第二个组件进行验证,因为它会更复杂。 【参考方案1】:仅在呈现响应阶段将readonly
属性设置为true
。这样,它在渲染响应阶段以外的所有其他阶段都不会被视为只读。
<h:inputText ... readonly="#facesContext.currentPhaseId.ordinal eq 6" />
【讨论】:
在我的情况下#facesContext.renderResponse returns false when drawing the html (had it printed in the middle of it). Anyway, it works as
#facesContext.currentPhaseId.ordinal eq 6`。莫哈拉 2.1.9.【参考方案2】:
我已经通过解决方法解决了这个问题。我添加了一个inputHidden
字段,该字段的required
属性true
不会出现在界面上,但会被验证:
<h:inputHidden value="#bean.value" required="true"
requiredMessage="Data must be entered" />
bean.value 的值被其他事件更改,并且在 inputHidden 上的某个 reRender 处,进行验证。
【讨论】:
【参考方案3】:从评论中回答:“在 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";
希望这会有所帮助。
【讨论】:
JSF 不会更新readonly="true"
输入的模型值。另外,在操作方法中而不是在普通验证器中进行验证是一种不好的做法。
@BalusC 感谢您提供的信息 :) 我不知道为输入设置 readonly="true" 不会更新模型值。至于在操作中进行验证,我知道这不是最佳实践,但我认为我们可能无法为只读输入添加普通验证器。【参考方案4】:
您很可能必须直接从您的事件中手动调用验证逻辑。这是来自 IBM 的 JSF 生命周期模型。
您会注意到流程验证阶段发生在通常处理事件的调用应用程序阶段之前。这发生在之后,因此不会自动进行验证。
【讨论】:
以上是关于jsf(richfaces)只读输入文本验证[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSF 2 + RichFaces 4 的输入字段中使用掩码?
RichFaces 3.3.3 和 JSF 2.0 工作示例