JSF虚拟表单,对应熟练使用JSF的人来说,可能也是很陌生的(如果之前未接触过Netbeans IDE里面的可视化JSF),我之前用过可视化JSF,觉得虚拟表单很不错,于是想迁移到JSF,Richfaces里面来,查看了很多源码和机制,终于写出来了,并且得到了大量的使用,解决了一些复杂页面的需求。
?
大家都知道在JSF的form里面的文本域,若验证不通过,即使是不需要提交的域,则也提交不了表单。
?
我这里简单的写了个文档,可能描述不是太清楚,不知道人家看到了能不能明白我的意思:
?
虚拟表单简述
?
(1)???? 说明
JSF有一个真实表单,另外可以定义多个虚拟表单。
虚拟表单由参与者和提交者组成。
虚拟表单可以有多个参与者,也可以没有参与者。
注:我们这是设置不参与提交的域
(2)???? 使用
我们扩展了原有的<h:form>组件,增加了submitConfig属性,用来配置虚拟表单,多个虚拟表单用“,”逗号隔开,虚拟表单名称和域名ID列表用“:”隔开,多个域则用“|”隔开,我们这里的虚拟表单名称就是要提交按钮的ID,如下:
submitConfig="button1:input_aa|input_aa1|aaa|ccc, button2:input_bb|input_bb1|bbb"
这里配置了2个虚拟表单,分别是button1、button2
button1不参与提交的域ID有input_aa、input_aa1、aaa
button2不参与提交的域ID有input_bb、input_bb1、bbb
当button1提交时,则会忽略域ID为input_aa、input_aa1、aaa的验证以及解码
当button2提交时,则会忽略域ID为input_bb、input_bb1、bbb的验证以及解码
当域ID被忽略时,则它里面的所有子域(子组件)也会被忽略
?
(3)???? 例子
<h:form submitConfig="button1:input_aa|input_aa1|aaa,button2:input_bb|input_bb1|bbb"> <s:div id="aaa"> <h:inputText required="true" /> <h:inputText required="true" /> </s:div> <s:div id="bbb"> <h:inputText required="true" /> <h:inputText required="true" /> </s:div> <h:inputText id="input_aa" required="true" /> <h:inputText id="input_aa1" required="true" /> <h:inputText id="input_bb" required="true" /> <h:inputText id="input_bb1" required="true" /> <h:commandButton id="button1" value="submit1" /> <h:commandButton id="button2" value="submit2" /> </h:form>
?
?
大致是这样配置后即可,对form组件标签的扩展程序暂时不提供出来。