Я считаю Веб приложение сделанным в 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>
Спасибо за Вашу помощь.
Я рекомендую тебе давать возможность использованию ее 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.
Попытайся помещать action вместо actionlistener, так как action он служит для buttons и listeners для checkbox, радио...
action ejecutarГ - чтобы в щелкать и каждый раз, когда я изменил стоимость (это это harГ - в actionlistener)
Чтобы дополнять ответ Luiggi Мендосы, я говорю тебе пару вещей.
У каждого backing bean должен быть scope. scope определяет область достижения этого bean в приложении. JSF 2.2 предлагает следующие scopes:
coversation.end()
. Возможно поддерживать conversaión между несколькими страницами.У тебя есть ответ здесь
backing bean должен быть последовательно преобразован если только он не был RequestScoped
. Это, потому что совещания сохраняют в сеансе, который закончил бы тем, что был бы HttpSession
и поскольку ты знаешь все признаки сеанса, они должны быть serializables (потому что сохраняют жесткий диск или другие средства). По этой причине большинство твоих backing beans было бы должно помогать Serializable
.