0

我用源代码写了一个visualforce页面

<apex:page controller="MyController1">
<apex:form>
<apex:pageBlock >
<apex:pageBlockSection  id="search">
<apex:commandLink action="{!commandLinkAction}" value="Advance Search"  reRender="thePanel" id="theCommandLink"/>
<apex:outputPanel id="thePanelWrapper">
<apex:outputPanel id="thePanel" rendered="{! rend}" layout="block">My div</apex:outputPanel>
</apex:outputPanel>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>

MyController1 类是

public class MyController1{
public Boolean rend{get;set;}
public PageReference commandLinkAction(){
rend=true;
return null;
}

}

当我点击“高级搜索”链接时没有任何反应,但我期待 ID 为“thePanel”的 outputPanel 应该呈现。为什么它不呈现,请有人解释一下?

4

3 回答 3

2

在您单击不在页面上的面板链接的那一刻,SF 没有呈现它。

于 2013-02-25T04:15:16.167 回答
1

正如@Shimshon 所说,当从 Visualforce 生成 HTML 代码时,标记为的 Visualforce 组件rendered="false"不会显示在生成的 HTML 文档中。

在这种情况下:

<apex:outputPanel id="thePanel" rendered="{! rend}" layout="block">

如果要重新渲染此面板,则必须确保该组件将显示在 HTML 代码中,以便重新渲染操作可以找到它。由于{! rend}最初在控制器的构造函数中设置为 false,“thePanel”永远不会在页面中呈现,因此您尝试重新呈现不存在的组件。

@theGreatDanton 的解决方案将起作用,因为<apex:outputPanel id="thePanelWrapper">始终呈现容器面板:

<apex:commandLink action="{!commandLinkAction}" value="Advance Search"  reRender="thePanelWrapper" id="theCommandLink"/>

如果这个面板被 rerender 属性指向,那么“thePanelWrapper”及其子节点(“thePanel”)将被更新。

于 2015-04-23T22:42:47.327 回答
0

试试下面的代码。

<apex:page controller="MyController1">
<apex:form>
<apex:pageBlock >
<apex:pageBlockSection  id="search">
<apex:commandLink action="{!commandLinkAction}" value="Advance Search"  reRender="thePanelWrapper" id="theCommandLink"/>
<apex:outputPanel id="thePanelWrapper">
<apex:outputPanel id="thePanel" rendered="{! rend}" layout="block">My div</apex:outputPanel>
</apex:outputPanel>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>

public class MyController1{
   public Boolean rend{get;set;}
   //setting the boolean to false in the constructor
   public MyController1(){
          rend = false;
   }
   public void commandLinkAction(){
      rend=true;
     // return null;
   }

}

希望这可以帮助!!

于 2013-02-26T02:37:26.793 回答