2

我正在使用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 没有正确绑定。提交带有此数据表的表单后,在我的控制器内,列表中的所有记录Name都是null. 即使我看到“名称”是在 http 请求中发布的。

我猜是渲染干扰绑定?因为如果我删除重新渲染的条件并显示所有InputField我可以在提交表单后获取控制器内的值

任何想法发生了什么?

4

1 回答 1

2

如果我没记错的话,页面上必须存在顶点标签才能重新呈现。

换句话说 - 某些东西(可能像<span id="long:generated:salesforce:id"></span>. 如果未渲染,它将保持未渲染状态。(1)

而不是rendered尝试将您的条件移动到stylestyleclass属性。就像是

<apex:inputField value="{!item.Name}" 
    required="{!a=='false'}" 
    style="display:{!IF(a=='false','inline', 'none')}"/>

visibility:hidden(如果您希望它们占据空间但不被看到)或display:none(让它们看起来完全不存在。另请参阅可见性:隐藏和显示:无之间有什么区别?


脚注:

(1) 除非您当然要重新呈现包含“this”标签(XML 中更高级别的东西)的标签。

于 2013-06-13T06:37:19.953 回答