我正在尝试使用JPA后端创建一个JSF表单。 类结构在很大程度上依赖于继承。 我试图让JSF表单模块化,因此我可以根据所制作对象的类包含不同的部分。现在我偶然发现了我需要子类控制器来设置所有数据的问题。所以我希望首先将controller-identifier设置为变量,然后包含超类的表单块(并在其上面的超类之类,等等)
(包含在代码中尚未包含)
<h:body>
<h:form>
<h1><h:outputText value="Make FieldPlayer"/></h1>
<h:panelGrid columns="2">
<c:set var="controller" value="#{fieldPlayerController}" scope="request" />
<h:outputLabel value="Name:" for="naam" />
<h:inputText id="naam" value="#{controller.fieldPlayer.name}" title="Naam" />
<h:outputLabel value="Birthday:" for="prijs" />
<h:inputText id="prijs" value="#{controller.birthday}" title="Prijs"/>
<h:commandButton value="save" action="#{controller.add()}"></h:commandButton>
</h:panelGrid>
</h:form>
</h:body>
但是我收到以下错误: /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";
}
...
提前致谢
答案 0 :(得分:0)
据我所知:你的控制器 fieldPlayerController 不拥有属性 fieldPlayer ,而是使用 player :
<h:inputText id="naam" value="#{controller.player.name}" title="Naam" />
如果 controller 仍然验证为null,请尝试使用 param :
<f:param name = "controller" value = "#{fieldPlayerController}" />
但 param 标记未提供范围属性...