<f:ajax listener =“”>未执行</f:ajax>

时间:2014-01-21 12:32:38

标签: ajax jsf listener

我正在尝试更改<f:ajax listener>时调用<h:selectOneMenu>方法。

这是观点:

<h:selectOneMenu label="verteilerlisten" 
    value="#{smsBean.verteilerliste}" id="verteilerlisten">
    <f:ajax listener="#{smsBean.verteilerlistenChanged}" 
        render="verteilerlisten" />
    <f:selectItems value="#{verteilerlisten.list}" 
        var="v" itemLabel="#{v.name}" itemValue="#{v.verteilerlistennummer}" />
</h:selectOneMenu>

这是#{smsBean}

public void verteilerlistenChanged(AjaxBehaviorEvent e) {
    System.out.println("success!");
    throw new RuntimeException("Success!");
}

项目显示正确,但在我更改选择框中的项目时没有任何反应。这是怎么造成的,我该如何解决?

编辑:

我使用以下代码创建了一个空白的xhtml文件(test.xhtml):

<?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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
<h:head />
<h:body>
    <h:form id="smsform">
        <h:selectOneMenu label="verteilerlisten" value="#{smsBean.verteilerliste}"
                         id="verteilerlisten">
            <f:selectItems value="#{verteilerlistenBean.list}" var="v"
                           itemLabel="#{v.name}" itemValue="#{v.verteilerlistennummer}"/>
            <f:ajax listener="#{smsBean.verteilerlistenChanged}" render="smsform"/>
        </h:selectOneMenu>
    </h:form>
</h:body>
</html>

这是VerteilerlistenBean.java:

@ManagedBean(name= "verteilerlistenBean")
@ApplicationScoped
public class VerteilerlistenBean {
  private Logger logger = Logger.getLogger(VerteilerlistenBean.class);
  private List<Verteilerliste> list = new ArrayList<Verteilerliste>();

  public VerteilerlistenBean() {
  }

  public List<Verteilerliste> getList() {
    // return list;
    logger.info("Getter invoked");

    List<Verteilerliste> list = new ArrayList<Verteilerliste>();

    list.add(new Verteilerliste(1, "Liste 1"));
    list.add(new Verteilerliste(2, "Liste 2"));
    list.add(new Verteilerliste(3, "Liste 3"));
    list.add(new Verteilerliste(4, "Liste 4"));
    list.add(new Verteilerliste(5, "Liste 5"));

    return list;
  }

  public void setList(final List<Verteilerliste> parList) {
    list = parList;
  }
}

这是smsBean(SendSMSFormBean.java):

@ManagedBean (name="smsBean")
@ViewScoped
public class SendSMSFormBean implements Serializable {
  private String absender;
  private Verteilerliste verteilerliste;
  private Textbaustein textbaustein;

  public SendSMSFormBean() {

  }

  public String getAbsender() {
    return absender;
  }

  public void setAbsender(final String parAbsender) {
    absender = parAbsender;
  }

  public Verteilerliste getVerteilerliste() {
    return verteilerliste;
  }

  public void setVerteilerliste(final Verteilerliste parVerteilerliste) {
    verteilerliste = parVerteilerliste;
  }

  public Textbaustein getTextbaustein() {
    return textbaustein;
  }

  public void setTextbaustein(final Textbaustein parTextbaustein) {
    textbaustein = parTextbaustein;
  }

  public void verteilerlistenChanged(AjaxBehaviorEvent e) {
    System.out.println("Success!");
  }
}

这些是我使用的库:

(我无法上传图片-.-)

  • 了Javassist-3.15.0-GA.jar
  • javax.faces-2.0.11.jar
  • 的javax.servlet-5.1.12.jar
  • 的javax.servlet-API-3.0.1.jar
  • javax.servlet.jar
  • javax.servlet.jsp.jstl-1.2.1.jar

已编辑2

我清理了我的类路径lib,以便所有这些类不再存在于其中(它现在使用来自tomcat的库)。我还在一个简单的例子中添加了一个(我在主要例子中得到了一个)。但是每当我在控制台中更改selectBox中的值时,仍会显示:

2014-01-21 16:03:48 INFO  VerteilerlistenBean:44 - Getter invoked

已编辑3

将f:ajax listener属性更改为“#{asdf.asdf}时。未显示错误!在此之前我尝试了#{smsBean.verteilerlistenChanged}和$ {smsBean.verteilerlistenChanged}

已编辑4 所以现在我认为我犯了错误:

<div class="ym-fbox">
<h:selectOneMenu label="verteilerlisten" id="verteilerlisten">
    <f:selectItems value="#{testbean.list}" var="v" itemLabel="#{v.name}" itemValue="#{v.id}"/>
    <f:selectItem itemLabel="Manuelle Eingabe" itemValue="man"/>
    <f:ajax listener="#{testbean.beep}" render="smsform"/>
</h:selectOneMenu>
</div>


<div class="ym-fbox">
<h:selectOneMenu label="verteilerlisten1" id="verteilerlisten1" value="#{smsBean.verteilerliste}">
    <f:selectItems value="#{verteilerlistenBean.verteilerlisten}" var="liste" itemLabel="#{liste.name}" itemValue="#{liste.verteilerlistennummer}" />
    <f:selectItem itemLabel="Manuelle Eingabe" itemValue="man"/>
    <f:ajax listener="#{testbean.beep}" render="smsform"/>
</h:selectOneMenu>
</div>

上面一个调用testbean.beep,当另一个调用时没有!如果您在selectOneMenu中删除属性“value”,它将起作用。我不知道为什么JSF这样做或为什么它没有向我显示任何错误..

但这并不能解决我的问题:我有2个豆子。一个是Bean,它保护表单中的输入(smsBean)。选择值应该保存在这个bean中。另一个bean类似于RessourceManager,它返回用户可以在框中选择的值。

我该怎么做?

0 个答案:

没有答案