Ciao ragazzi, usando JSF e i relativi tag per tabella e commandButton ho incontrato il seguente problema:
All'avvio dell'applicazione la tabella viene "processata", i dati recuperati, ma viene automaticamente azionato il bottone, senza averci cliccato.
Una volta che la pagina è caricata, il commandButton non si aziona.
Questo è la pagina indiex.jsp:
Questo è il web.xml:codice:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <html> <head> <title>Tabella di Prova</title> </head> <body> <f:view> <body> <h:panelGrid border="1" style="text-align: center;"> <h:dataTable value="#{order.distributore}" var="prodotto" border="1"> <h:column> <f:facet name="header"> <h:outputText value="Quantita'" /> </f:facet> <!-- column header --> <!-- row record --> <h:outputText value="#{prodotto.q}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Prodotto" /> </f:facet> <h:outputText value="#{prodotto.nome}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Prezzo" /> </f:facet> <h:outputText value="#{prodotto.p}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="ID" /> </f:facet> <!-- column header --> <!-- row record --> <h:outputText value="#{prodotto.idProdotto}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Azione" /> </f:facet> <!-- column header --> <!-- row record --> <h:commandButton value="submit" onclick="#{order.acquistaProdotto(2)}"> </h:commandButton> </h:column> </h:dataTable> </h:panelGrid> </body> </f:view> </body> </html>
codice:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>TutorialJSF</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet><!-- <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> --> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>resources.application</param-value> </context-param> <context-param> <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name> <param-value>true</param-value> </context-param> <context-param> <description> If true, rendered HTML code will be formatted, so that it is 'human-readable' i.e. additional line separators and whitespace will be written, that do not influence the HTML code. Default is 'true'</description> <param-name>org.apache.myfaces.PRETTY_HTML</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name> <param-value>false</param-value> </context-param> <context-param> <param-name>org.apache.myfaces.AUTO_SCROLL</param-name> <param-value>true</param-value> </context-param> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> <welcome-file-list> <welcome-file>faces/index.jsp</welcome-file> </welcome-file-list> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> </web-app>
Questo è ciò che fa il commandButton, che si avvia automaticamente allo start-up:
codice:public void acquistaProdotto(int i) { for (Distributore prodotto : this.distributore) { if (prodotto.getIdProdotto() == i) { prodotto.setQ(prodotto.getQ() - 1); } } }
Avete idee su cosa possa causare questa anomalia?
Grazie per l'aiuto![]()

Rispondi quotando