Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF控制器作为变量_Java_Jsf_Jsf 2_Ejb - Fatal编程技术网

Java JSF控制器作为变量

Java JSF控制器作为变量,java,jsf,jsf-2,ejb,Java,Jsf,Jsf 2,Ejb,我正在尝试创建一个带有JPA后端的JSF表单。 类结构严重依赖于继承。 我试图将JSF表单模块化,以便根据所生成对象的类别包含不同的部分。现在我偶然发现了一个问题,我需要子类的控制器来设置所有数据。因此,我希望首先将控制器标识符设置为变量,然后包括超类的表单部分(以及在超类的表单部分之上,以此类推) (代码中还没有包含这些内容) 但我得到了以下错误: /add_fieldPlayer.xhtml@17,94 value=“#{controller.fieldPlayer.name}”:无法访

我正在尝试创建一个带有JPA后端的JSF表单。 类结构严重依赖于继承。 我试图将JSF表单模块化,以便根据所生成对象的类别包含不同的部分。现在我偶然发现了一个问题,我需要子类的控制器来设置所有数据。因此,我希望首先将控制器标识符设置为变量,然后包括超类的表单部分(以及在超类的表单部分之上,以此类推)

(代码中还没有包含这些内容)


但我得到了以下错误: /add_fieldPlayer.xhtml@17,94 value=“#{controller.fieldPlayer.name}”:无法访问目标,标识符“controller”解析为null

我在什么地方出错了吗?或者不能在变量中设置控制器

控制器代码:

@Named(value = "fieldPlayerController")
@SessionScoped
public class FieldPlayerController extends PlayerController<FieldPlayer> {

    public FieldPlayerController() {
        super(FieldPlayer.class);
    }
}

@Named(value = "playerController")
@Dependent
public abstract class PlayerController<T> implements Serializable {

    @EJB
    private AbstractFacade<T> facade;
    private T player;

    public PlayerController(Class<T> entityClass) {
        try {
            this.player = entityClass.newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(PlayerController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public T getPlayer() {
        return player;
    }

    public void setPlayer(T p) {
        this.player = p;
    }

    public List<T> findAll() {
        return this.facade.findAll();
    }

    public String add() throws ParseException {
        this.facade.create(player);
        try {
            this.player = (T) player.getClass().newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(PlayerController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "index";
    }
...
@Named(value=“fieldPlayerController”)
@会议范围
公共类FieldPlayerController扩展了PlayerController{
公共野战玩家控制器(){
超级(野手级);
}
}
@命名(value=“playerController”)
@依赖的
公共抽象类PlayerController实现可序列化{
@EJB
私人立面;
私人T播放器;
公共播放器控制器(类entityClass){
试一试{
this.player=entityClass.newInstance();
}catch(实例化异常| IllegalAccessException ex){
Logger.getLogger(PlayerController.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共T getPlayer(){
返回球员;
}
公共无效设置播放器(TP){
this.player=p;
}
公共列表findAll(){
返回这个.facade.findAll();
}
公共字符串add()引发ParseException{
this.facade.create(player);
试一试{
this.player=(T)player.getClass().newInstance();
}catch(实例化异常| IllegalAccessException ex){
Logger.getLogger(PlayerController.class.getName()).log(Level.SEVERE,null,ex);
}
返回“索引”;
}
...

提前感谢

据我所知:您的控制器fieldPlayerController不拥有fieldPlayer属性,请改用player:


如果控制器仍然验证为null,请尝试使用参数:



但是param标记不提供scope属性…

您也应该发布控制器代码。
@Named(value = "fieldPlayerController")
@SessionScoped
public class FieldPlayerController extends PlayerController<FieldPlayer> {

    public FieldPlayerController() {
        super(FieldPlayer.class);
    }
}

@Named(value = "playerController")
@Dependent
public abstract class PlayerController<T> implements Serializable {

    @EJB
    private AbstractFacade<T> facade;
    private T player;

    public PlayerController(Class<T> entityClass) {
        try {
            this.player = entityClass.newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(PlayerController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public T getPlayer() {
        return player;
    }

    public void setPlayer(T p) {
        this.player = p;
    }

    public List<T> findAll() {
        return this.facade.findAll();
    }

    public String add() throws ParseException {
        this.facade.create(player);
        try {
            this.player = (T) player.getClass().newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(PlayerController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "index";
    }
...
<h:inputText id="naam" value="#{controller.player.name}" title="Naam" />
<f:param name = "controller" value = "#{fieldPlayerController}" />