function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
LithiumsLithiums 

Urgent Rerender Issue

Please help me with the rendered issue.I have created a page and would like to display the outputtext based on the flag in the controller, I am making a java remote call and passing a parameter to the controller based on which the flag will be set. Somehow the value is always false and the text is not displayed. This is the simplified version of code and I removed a lot of unnecessary stuff.

 

<apex:page sidebar="false" showHeader="false" controller="TestController">

<script type="text/javascript">
    function colid(name){
        Visualforce.remoting.Manager.invokeAction(
                    '{!$RemoteAction.TestController.actFlag}',name,
                    function(result, event){
                        if(event.status){
                            if(result == true){
                            
                            }
                        }
                    },
                    {escape: true});
    }
</script>

<apex:form >
<apex:pageBlock >
    <apex:outputText >
        <script type="text/javascript">
            colid('Test');
        </script>
    </apex:outputText>
    <apex:outputText value="Test" id="theValue" rendered="{!activityFlag}" />{!activityflag}
</apex:pageBlock>
</apex:form>
</apex:page>

 

global  class TestController {

    public static boolean activityflag{get;set;}
    
    @RemoteAction
    global static void actFlag(String phaseName)
    {
        
        activityflag = true;
    }
}

Shiv ShankarShiv Shankar

Hi Lithiums i have seen the proplem when we reRender a componet which is haveing rendered attribue with it.

 

Solution

 

<apex:page sidebar="false" showHeader="false" controller="TestController">

<script type="text/javascript">
    function colid(name){
        Visualforce.remoting.Manager.invokeAction(
                    '{!$RemoteAction.TestController.actFlag}',name,
                    function(result, event){
                        if(event.status){
                            if(result == true){
                            
                            }
                        }
                    },
                    {escape: true});
    }
</script>

<apex:form >
<apex:pageBlock >
    <apex:outputText >
        <script type="text/javascript">
            colid('Test');
        </script>
    </apex:outputText>

<apex:outputPanel id="XYZ">
    <apex:outputText value="Test" id="theValue" rendered="{!activityFlag}" />{!activityflag}

</apex:outputPanel>
</apex:pageBlock>
</apex:form>
</apex:page>

 

global  class TestController {

    public static boolean activityflag{get;set;}
    
    @RemoteAction
    global static void actFlag(String phaseName)
    {
        
        activityflag = true;
    }
}

 

 

Just reRender this panel if flag is true output text will apper otherwise it will not appear....

LithiumsLithiums

Thanks for you reply.

 

Using the javascript remote  I cannot rerender, do I have to take complete different approach by calling a apex:actionfunction and rerendering the panel.

 

Or is there a better approach ?

Shiv ShankarShiv Shankar

Hi Litmis,

 

Just I saw standard document for remote action of salesforce. I come to know than we can not reRender panel using remote action.

 

Points are :

 

The <apex:actionFunction> component also lets you call controller action methods through JavaScript. Here are some differences between the two:
  • The <apex:actionFunction> tag:
    • lets you specify rerender targets
    • submits the form
    • does not require you to write any JavaScript
  • JavaScript remoting:
    • lets you pass parameters
    • provides a callback
    • requires you to write some JavaScript

In general, <apex:actionFunction> is easier to use and requires less code, while JavaScript remoting offers more flexibility.

 

 

- Since we are reRendering <apex:Inputfield> so we can nor use remote action otherwise to show simple message or input field we could've you remote action like this...

 

document.getElementById('acctId').innerHTML = result.Id

 

But from my side i am sure we can not reRender <apex:inputField> because we are having rendered attribute with it.

LithiumsLithiums

hi shiva,

 

I have chaged the code a little bit and calling the action function and trying to rerender the outputtext, but I dont see the method being called or the flag being set to true.The script has to be inside the outputext as I am going to put that in a repeat tag and pass some values. This is the simpler version and i was having issues in setting the flag to true.

 

Can you please look into this as this is very urgent

 

<apex:page sidebar="false" showHeader="false" controller="TestController">

<script type="text/javascript">
    function click(){
        alert("Done");
    }
</script>


<apex:form >
<apex:actionRegion >
    <apex:actionFunction action="{!actFlag}" name="activityflagset" oncomplete="click()" reRender="theValue"/>
</apex:actionRegion>
<apex:pageBlock >
    <apex:outputText >
        <script type="text/javascript">
            activityflagset();
        </script>
    </apex:outputText>
    <apex:outputText value="Test" id="theValue" rendered="{!activityFlag}" />  
    
</apex:pageBlock>

</apex:form>
</apex:page>

---------------------

 

public  class TestController {

    public static boolean activityflag{get;set;}
    
    
    public static void actFlag()
    {
        
        activityflag = true;
    }
}