Input given in JSF page does not set that value to managed bean variable [duplicate]

☆樱花仙子☆ 提交于 2019-12-24 13:02:50

问题


Am a newbie to JSF. Am using JSF 2 and primefaces 4.0 in my application. As stated in the Title, the input value given in the xhtml page, does not set the value to the ManagedBean. I have tried all the possible combination.

growlMessage.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>

    </h:head>

   <h:body>
    <h:form> 
  <p:growl id="growl" showDetail="true" sticky="true" />  

    <p:panel id="panelID" header="Growl">  
        <h:panelGrid columns="2" cellpadding="5">  
            <h:outputLabel for="msg" value="Message:" />   
            <p:inputText id="msg" value="#{growlView.message}" required="true" />  
        </h:panelGrid>  
      <p:commandButton value="Save" actionListener="#{growlView.saveMessage}"/>  
    </p:panel> 

   </h:form>  
    </h:body>
</html>

` GrowlView.java:

import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;


@ManagedBean
@ViewScoped
public class GrowlView implements Serializable{

    private String message;

    public GrowlView() {
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


    public void saveMessage(){
        System.out.println("@@@@@  hello");
        System.out.println("@@@@@"+ getMessage());
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Successful", "Your message: "+message));
        context.addMessage(null, new FacesMessage("Second message", "Additional Message details"));
     }
  }

回答1:


Do you have a good reason to use JSF 2.0 instead of 2.2? You should use CDI instead of JSF managed beans, which is more or less deprecated. So, use

@Named
@ViewScoped
public class GrowlView implements Serializable

Be sure the ViewScoped annotation is from javax.faces.view. And the beginning of the xhtml should use the new namespace:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui">



回答2:


Your commandButton should look like this (according to PrimeFaces showcase):

<p:commandButton value="Save" actionListener="#{growlView.saveMessage}" update="growl"/>

Have you tried setting a larger scope to your managed bean, for example @SessionScoped ? (just for testing purposes). So you could exclude a possible scope problem.




回答3:


try this following code: using the process and partialSubmit attributes:

<p:commandButton value="Save" actionListener="#{growlView.saveMessage}" update="growl" process="@form" partialSubmit="true"/>



回答4:


hy,

change for

 <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>

    </h:head>

   <h:body>
    <h:form> 
  <p:growl id="growl" showDetail="true" sticky="true" autoUpdate="true"/>  

    <p:panel id="panelID" header="Growl">  
        <h:panelGrid columns="2" cellpadding="5">  
            <h:outputLabel for="msg" value="Message:" />   
            <p:inputText id="msg" value="#{pageView.message}" required="true" />  
        </h:panelGrid>  
      <p:commandButton value="Save" action="#{pageView.saveMessage}" update="growl"/>  
    </p:panel> 

   </h:form>  
    </h:body>
</html>

and replace

@ManagedBean

with

@ManagedBean(name="pageView")


来源:https://stackoverflow.com/questions/24096867/input-given-in-jsf-page-does-not-set-that-value-to-managed-bean-variable

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!