apex:inputField绑定值未更新

时间:2013-06-12 22:26:46

标签: salesforce apex-code visualforce

我正在使用 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我可以在提交表单后获取控制器内的值

任何想法发生了什么?

1 个答案:

答案 0 :(得分:2)

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

换句话说 - 某些东西(可能像<span id="long:generated:salesforce:id"></span>一样简单)必须是HTML格式,以便以后的AJAX更新将新内容注入占位符。如果它没有渲染,它将保持不渲染。(1)

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

这样的东西
<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中更高的标记)。