JSF 1.1:关于生命周期的问题,为什么渲染属性会影响下面的托管bean操作?

时间:2009-04-11 02:02:13

标签: jsf lifecycle

我有一个页面“start.jsf”,它指向一个动作#{ruler.start},此动作将请求转发给“flow.jsf”。

托管bean “标尺”(请求作用域)包含一些属性,其中一个名为“ruler.operation”,正确填充到“start.jsf”中。

页面“flow.jsf”有一个命令按钮,指向另一个名为“objectList”(会话作用域)的托管bean ,其中包含一个名为“objectList.selectedContractor”的属性对象(一个POJO初始化为构造函数,所以它的子属性在第一次 MB 调用时总是为空,或者是错误的?),它的动作是#{objectList.itemInsert}。

“flow.jsf”的表单页面包含以下标记:

 <h:form>
 <h:inputText id="crnameNew" value="#{objectList.selectedContractor.crname}" rendered="#{ruler.operation eq ruler.codeOperationNew}" />

 <h:inputText id="someProp" value="#{objectList.someProp}" />
 <h:commandButton styleClass="importedButton" value="insert" action="#{objectList.itemInsert}" />
 </h:form>

好吧,当我提交动作#{objectList.itemInsert}时,只有“someProp”正确填充到MB中,而“selectedContractor.crname”结果为空。

但是如果我从绑定#{objectList.selectedContractor.crname}的标签切换“rendered”属性,那么当调用#{objectList.itemInsert}时它会正常工作并填充...所以为什么“渲染“会影响提交的处理吗?

1 个答案:

答案 0 :(得分:1)

由于属性表明它只影响渲染。如果它在页面上呈现,那么该值将在表单提交时发送回Bean。如果它正在渲染而且这种情况没有发生,那么其他的东西就错了。