I have written two managedbean classes named Message and HelloWorld. They are as follow :
Message.java :
package com.bean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "message", eager = true)
@RequestScoped
@SessionScoped
public class Message {
    private String message = "Hello World!";
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
HelloWorld.java
package com.bean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "helloWorld")
@RequestScoped
@SessionScoped
public class HelloWorld {
   @ManagedProperty(value="#{message}")
   private Message messageBean;
   private String msg;
   public HelloWorld() {
      System.out.println("HelloWorld started!"); 
   }
   public void setMessage(String message) {
       this.msg = message;
   }
   public String getMessage() {
      if(messageBean != null){
         msg = messageBean.getMessage();
      }       
      return msg;
   }
   public void setMessageBean(Message message) {
      this.messageBean = message;
   }
   public void showMsg(){
      // String str="I am a demo string!";
       System.out.println(msg +" I am from showMsg()");
   }  
}
And, my index.xhtml here:
<body>
    #{helloWorld.message}
    <h:form>
        <h:commandButton value="Show Msg" action="#{helloworld.showMsg}"/>
    </h:form>
</body>
#{helloWorld.message} prints the message perfectly. But the <h:commandButton> does not invoke the methodshowMsg()`. What's the problem? 
 
     
     
     
    