我正在使用 Apex控制器和Visual Force页面。 在vf页面内部,我有一个数据表,该表的每一行都绑定到从控制器生成的列表中的值 示例代码:
<apex:dataTable value="{!List}" var="item" styleClass="class1" >
...
<apex:column headerValue="Header1">
<apex:outputpanel rendered="{!NOT((a=='true'))}">
<div class='estimate-name-column'>
<apex:inputField value="{!item.Name}" required='true' rendered="{!(a=='false')}"/>
</div>
</apex:outputpanel>
</apex:column>
...
</apex:datatable>
正如您所看到的,我试图在某些条件下隐藏一些inputFields。
然而,有一个问题。如果我执行上述操作,那些渲染的inputFields没有正确绑定。在使用此数据表提交表单后,在我的控制器中,列表Name
中的所有记录都为null
。即使我看到“姓名”已在http请求中发布。
我猜是渲染会干扰绑定?因为如果我删除了重新呈现的条件并显示所有InputField
我可以在提交表单后获取控制器内的值
任何想法发生了什么?
答案 0 :(得分:2)
如果我没记错的话,页面上必须有一个顶点标签才能被重新呈现。
换句话说 - 某些东西(可能像<span id="long:generated:salesforce:id"></span>
一样简单)必须是HTML格式,以便以后的AJAX更新将新内容注入占位符。如果它没有渲染,它将保持不渲染。(1)
而不是rendered
尝试将您的条件移至style
或styleclass
属性。像
<apex:inputField value="{!item.Name}"
required="{!a=='false'}"
style="display:{!IF(a=='false','inline', 'none')}"/>
visibility:hidden
(如果你希望他们占据他们的空间而不被看到)或display:none
(让他们看起来完全不在那里。另见What is the difference between visibility:hidden and display:none?
脚注:
(1)除非您将重新呈现包含“this”标记的标记(XML中更高的标记)。