我正在尝试将commandLink放在数据表的列中,但是单击该链接,该方法不会在backbean中调用,屏幕刷新并且没有任何反应。
我知道互联网上有几个关于我的问题的话题。我已经尝试了所有的解决方案,并且努力工作。我试过改变bean的范围,试图切换到h:commandLink我清理了我的html并删除了模板,没有解决任何问题。我究竟做错了什么?按照我的代码:
我使用的是glasshfish 3和primeface 3.5
XHTML:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<h:form id="formTournament">
<p:messages id="messages" />
<p:dataTable id="tableTournaments"
value="#{tournamentBean.lazyModel}" var="tournament">
<p:column>
<p:commandLink id="signupt" action="#{tournamentBean.signUpTournament}"
update=":formTournament">
<f:setPropertyActionListener value="#{tournament}"
target="#{tournamentBean.selectedTournament}" />
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
豆
@ManagedBean
@ViewScoped
public class TournamentBean{
private Tournament selectedTournament;
public TournamentBean() {
this.selectedTournament = new Tournament();
}
public void signUpTournament() {
this.tournamentController.signUpTournament(this.selectedTournament);
}
//getters and setters
}
感谢您的帮助!
答案 0 :(得分:1)
感谢大家的帮助,
我找到了解决方案,我的bean注释错了。我导入了错误的类javax.faces.view.ViewScoped。
正确的类是javax.faces。 bean .ViewScoped。
这就是为什么datatable中没有一个动作可以工作的原因。我的疑问是,为什么其他按钮可以解决我的应用程序中的数据表?
无论如何现在都有效。
答案 1 :(得分:0)
对于manager bean的每个属性,您必须具有相应的get和set。你也应该尝试使用action方法而不是actionListing方法。 ActionListener用于实际操作之前的执行操作。 (有关它的更多信息,您必须阅读JSF生命周期)。
似乎还缺少manager bean中的其他一些方法,例如lazyModel属性的get方法。