无法从jsf页

时间:2017-03-24 18:31:12

标签: maven tomcat jsf primefaces managed-bean

我的托管bean从jsf页面中的简单表单获取空值。实际上我有一个相当发达的界面,但问题是即使用一个简单的形式发生。

(JSF 2.1.0,java编译器1.6,primefaces 6.0和tomcat7)

这似乎是一个重复的问题。但是,5天前我正在寻找解决这个奇怪问题的方法。我找到了很多解决方案,但它对我不起作用。也许我不太明白它们是BalusC(commandButton/commandLink/ajax action/listener method not invoked or input value not updated)的答案。

JSF页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>    
<h:body>
    <h:form>
            <h:inputText value="#{notification.typeSelected}"></h:inputText>
            <p:commandButton value="Enregistrer"
                actionListener="#{notificationBean.filtrer}" process="@this"
                style="float:right">
            </p:commandButton>
        </h:form>
</h:body>
</html>

托管bean:

package presentation;
import java.util.ArrayList;
import java.util.List;    
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
//import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;    
import org.apache.log4j.Logger;    
import entities.Contrainte;
import metier.ContrainteMetier;
import metier.ContrainteMetierImp;    
@ManagedBean
@SessionScoped
public class NotificationBean implements java.io.Serializable{
    private static final long serialVersionUID = 1L;

    public static Logger log = Logger.getLogger(ProjetMODBean.class);

    private ContrainteMetier contrainteM = new ContrainteMetierImp();
    private List<Contrainte> contrainteL;
    private List<Contrainte> filtreL;
    private List<SelectItem> classificationL;
    private String typeSelected;
    //Constructeurs
    public NotificationBean() {
    }
    public NotificationBean(ContrainteMetier contrainteM, List<Contrainte> contrainteL) {
        super();
        this.contrainteM = contrainteM;
        this.contrainteL = contrainteL;
    }

    @PostConstruct
    public void init() {

        contrainteL = contrainteM.findAll();
        classificationL = new ArrayList<SelectItem>();

        for(Contrainte c:contrainteL)
        {//Attention, il ne faut pas dupliquer les types dans la liste déroulante           
            classificationL.add(new SelectItem(c.getClassification()));
        }
        log.info(" dans init je filtre selon: " + getTypeSelected());


    }


    //Méthodes
    public void filtrer(ActionEvent e)
    {
        setTypeSelected(typeSelected);
        log.info("je filtre selon: " + getTypeSelected());      
    }

控制台输出:

2017-03-24 18:06:43 INFO  ProjetMODBean:57 -  dans init je filtre selon: null
2017-03-24 18:06:43 INFO  ProjetMODBean:76 - je filtre selon: null  

我试图纠正我的错误,但细节逃脱了我。

1 个答案:

答案 0 :(得分:2)

Imho您的问题是process="@this"将其更改为process="@form"(这是默认值,因此只有在您有充分理由的情况下才更改它)或添加ID以输入并使用process="@this idOfInputField"

请参阅question

请用英文完整地发布问题。 我假设,//Méthodes意味着字段的getter / setter(JSF需要输入的getter / setter)。

也可以使用注射服务。 将方法标题从public void filtrer(ActionEvent e)更改为public void filtrer()