时间:2013-08-28 01:01:17

标签: java jsf primefaces

我正在尝试将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

}

感谢您的帮助!

2 个答案:

答案 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方法。