在JSF中有很多材料区分value属性和binding属性.
我对这两种方法如何彼此不同感兴趣.鉴于:
public class User {
private String name;
private UICommand link;
// Getters and setters omitted.
}
Run Code Online (Sandbox Code Playgroud)
<h:form>
<h:commandLink binding="#{user.link}" value="#{user.name}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
value指定属性时会发生什么变化.getter运行以返回bean 的name属性值User.该值将打印到HTML输出.
但我无法理解它是如何binding运作的.生成的HTML如何维护与bean link属性的绑定User?
下面是手动美化和注释后生成的输出的相关部分(注意id j_id_jsp_1847466274_1是自动生成的,并且有两个隐藏的输入小部件).我正在使用Sun的JSF RI 1.2版.
<form action="/TestJSF/main.jsf" enctype="application/x-www-form-urlencoded"
id="j_id_jsp_1847466274_1" method="post" name="j_id_jsp_1847466274_1">
<input name="j_id_jsp_1847466274_1" type="hidden" value="j_id_jsp_1847466274_1">
<a href="#" onclick="...">Name</a>
<input autocomplete="off" id="javax.faces.ViewState" name="javax.faces.ViewState"
type="hidden" value="-908991273579182886:-7278326187282654551">
</form>
Run Code Online (Sandbox Code Playgroud)
在哪里binding存放在这里?
我想比较两个日期(StartDate和EndDate)并检查一个日期是否在另一个日期之前.最简单的解决方案是在支持bean上执行此操作并将方法"短路".
但是,此验证不会与其他表单验证同时发生.例如,如果我有另一个需要验证的字段(除了日期)并且输入无效,我将只收到该特定字段的消息.只有当其他字段有效时,才会根据辅助bean获取日期验证.
有人有解决方案吗?
我遇到的问题是PrimesFaces 3.4.1日历.当使用通过按钮或输入字段焦点激活的弹出日期选择器时,您只能选择工作正常,快乐日子的有效日期!
当您手动将日期添加到输入字段时,如果您添加一个无效的日期,PrimeFaces日历组件会将其转换为有效日期然后发送它,这意味着后端验证是不行的.以下一些有趣的翻译:
要重现这种疯狂,请看看PrimeFaces日历展示.
我已经看到使用该readOnlyInput='true'属性的解决方案,但这似乎只是防止在字段中输入字母而不是数字或斜杠.以下是我实施的日历的一个实例:
<p:calendar id="fldDateOfBirth"
value="#{pc_CreateUser.user.dateOfBirth}"
binding="#{pc_CreateUser.dobComp}"
navigator="true"
pattern="dd/MM/yyyy"
maxlength="10"
yearRange="-100"
validator="#{pc_CreateUser.validateDOB}"
title="#{msg.user_date_format_default_tip}"
converterMessage="#{msg.user_error_dob_invalid}"
readOnlyInput="true"
showOn="button" />
Run Code Online (Sandbox Code Playgroud)
解决方案明智我对任何建议持开放态度:
在此先感谢,这已经引起了我好几周的问题!
jsf ×3
validation ×2
binding ×1
calendar ×1
components ×1
date-range ×1
java ×1
jsf-2 ×1
primefaces ×1