Не отвечает Веб Актионлистенер Коммандбуттон App

Я считаю Веб приложение сделанным в Netbeans 8.1, Java 8 и Maven

Во-первых в моем классе Managed Bean Controller.java разместите этикетку @ViewScope. Когда он составит, и я сделал deploy приложения у меня появлялась ошибка

Серьезно: Тяжелый Exception while loading the app: Undeployment failed for context/CustomerData1 Тяжелый: Exception while loading the app: CDI deployment failure:WELD-000072: Bean declaring в passivating scope must be passivation capable. Bean: Managed Bean [class net.ensode.glassfish.jsfajax. Controller] with qualifiers [@Default @Any @Named] org.jboss.weld.exceptions. DeploymentException: WELD-000072: Bean declaring в passivating scope must be passivation capable. Bean: Managed Bean [class net.ensode.glassfish.jsfajax. Controller] with qualifiers [@Default @Any @Named]

Так что то, что я сделал, состояло в том, чтобы забирать этикетку @ViewScoped и приложение я составляю правильно и также deploy, но когда я кликаю в command button не работает код метода calculateTotal, просто он не делает nunguna действие. Имеет общее этикетка @ViewScoped который я удалил из кода controller.java?

Также я присоединяю файл xhtml.

import javax.faces.event.ActionEvent;
import javax.faces.view.ViewScoped;
import javax.inject.Named;


//@ViewScoped elimine esta etiqueta y el proyecto compilo y deploy ok.


@Named
public class Controller {

  private String text;
  private int firstOperand;
  private int secondOperand;
  private int total;

  public Controller() {
  }

  public void calculateTotal(ActionEvent actionEvent) {
    total = firstOperand + secondOperand;
  }

  public String getText() {
    return text;
  }

  public void setText(String text) {
    this.text = text;
  }

  public int getFirstOperand() {
    return firstOperand;
  }

  public void setFirstOperand(int firstOperand) {
    this.firstOperand = firstOperand;
  }

  public int getSecondOperand() {
    return secondOperand;
  }

  public void setSecondOperand(int secondOperand) {
    this.secondOperand = secondOperand;
  }

  public int getTotal() {
    return total;
  }

  public void setTotal(int total) {
    this.total = total;
  }
}

<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>
       <title>JSF Ajax Demo</title>
     </h:head>
      <h:body>
        <h2>JSF Ajax Demo</h2>
       <h:form>
      <h:messages/>
      <h:panelGrid columns="2">

        <h:outputText value="Echo input:"/>
        <h:inputText id="textInput" value="#{controller.text}">
          <f:ajax render="textVal" event="keyup"/>
        </h:inputText>

        <h:outputText value="Echo output:"/>
        <h:outputText id="textVal" value="#{controller.text}"/>
      </h:panelGrid>
      <hr/>
      <h:panelGrid columns="2">
        <h:panelGroup/>
        <h:panelGroup/>
        <h:outputText value="First Operand:"/>
        <h:inputText id="first" value="#{controller.firstOperand}" size="3"/>
        <h:outputText value="Second Operand:"/>
        <h:inputText id="second" value="#{controller.secondOperand}" size="3"/>
        <h:outputText value="Total:"/>
        <h:outputText id="sum" value="#{controller.total}"/>
        <h:commandButton actionListener="#{controller.calculateTotal}"
                         value="Calculate Sum">
          <f:ajax execute="first second" render="sum"/>
        </h:commandButton>

      </h:panelGrid>
    </h:form>
  </h:body>
</html>

Спасибо за Вашу помощь.

1
задан 28.01.2016, 04:14
3 ответа

Я рекомендую тебе давать возможность использованию ее anotaciГіn @ViewScoped в твоем bean и добавлять, что ты Controller осуществил интерфейс Serializable. Это, чтобы решать проблему WELD-000072, основанную на Java Error:WELD-000072 Managed bean declaring в passivating scope must be passivation capable .

Потом, я рекомендую реализовывать следующие изменения в тебе cГіdigo:

@Named
@ViewScoped
public class Controller implements Serializable {
    //...
    public void calculateTotal() {
        total = firstOperand + secondOperand;
    }
    //...
}

И в cГіdigo Facelets:

<h:commandButton action="#{controller.calculateTotal}"
    value="Calculate Sum">
    <f:ajax execute="first second" render="sum"/>
</h:commandButton>

я рекомендую Тебе использовать action прежде чем actionListener. Ты можешь находить больше explicaciГіn различий между ними в следующем соединении: Differences between action and actionListener . BalusC один gurГє в JSF.

2
ответ дан 24.11.2019, 14:56

Попытайся помещать action вместо actionlistener, так как action он служит для buttons и listeners для checkbox, радио...

action ejecutarГ - чтобы в щелкать и каждый раз, когда я изменил стоимость (это это harГ - в actionlistener)

1
ответ дан 24.11.2019, 14:56
  • 1
    Ничто не разместило свойство action, но оно не функционирует. и #191; он будет из-за этикетки < f:ajax execute = и quot; first" render = и quot; sum" / >? хуже я не вижу совсем не плохой с этим. – harpazo 28.01.2016, 16:21

Чтобы дополнять ответ Luiggi Мендосы, я говорю тебе пару вещей.

У каждого backing bean должен быть scope. scope определяет область достижения этого bean в приложении. JSF 2.2 предлагает следующие scopes:

  • ViewScoped: существуй так пока были в виде)
  • RequestScoped: только существуй пока продолжилась просьба HTTP)
  • FlowScoped: существуй пока продолжилась определенная разгрузка)
  • ConversationScoped: существуй пока не закончился чат звоня в coversation.end(). Возможно поддерживать conversaión между несколькими страницами.
  • SessionScoped: существуй пока продолжился сеанс HTTP)
  • ApplicationScoped: существуй пока приложение было поднято)

Когда использовать каждый scope?

У тебя есть ответ здесь


backing bean должен быть последовательно преобразован если только он не был RequestScoped. Это, потому что совещания сохраняют в сеансе, который закончил бы тем, что был бы HttpSession и поскольку ты знаешь все признаки сеанса, они должны быть serializables (потому что сохраняют жесткий диск или другие средства). По этой причине большинство твоих backing beans было бы должно помогать Serializable.

1
ответ дан 24.11.2019, 14:56

Теги

Похожие вопросы