我一直在寻找解决问题的方法,但直到现在什么也没得到。我在Eclipse JEE上创建了一个新的动态项目。我正在尝试创建一个简单的项目:我有 3 个 inputText,其中 2 个用于我想要求和的数字,第三个用于结果。
在我的控制器中,我有 sum 操作,可以访问用户输入的 2 个值或属性numA
和numB
。
但我的问题是控制器上的值始终为空。我把二传手和二传手放进去,但二传手没有被召唤,只是被叫了。
这是我的代码:
索引.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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:form enctype="multipart/form-data" id="calc">
<h:inputText id="somaNumA" value="#{calcController.numA}" />
<h:inputText id="somaNumB" value="#{calcController.numB}" />
<h:inputText id="resultadoSoma" value="#{calcController.result}" />
<h:commandButton value="Somar" id="botaoSoma" type="button" onclick="#{calcController.soma()}" ajax="true">
<f:ajax execute="calc" render=":calc:resultadoSoma" />
</h:commandButton>
</h:form>
</html>
这是控制器:
import java.io.Serializable;
import javax.faces.bean.SessionScoped;
@SessionScoped
public class CalcController implements Serializable {
private static final long serialVersionUID = -1609040715417969082L;
private String numA, numB, result;
public CalcController() {}
public String soma() {
Integer resultInt = 0;
if (numA != null && numB != null) {
resultInt = Integer.parseInt(numA) + Integer.parseInt(numB);
}
this.result = resultInt.toString();
//setResult("teste");
return this.result;
}
public String getNumA() {
System.out.println("get");
return numA;
}
public void setNumA(String numA) {
System.out.println("set");
this.numA = numA;
}
public String getNumB() {
return numB;
}
public void setNumB(String numB) {
this.numB = numB;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
人脸配置.xml:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<managed-bean>
<managed-bean-name>calcController</managed-bean-name>
<managed-bean-class>com.controller.CalcController</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
网站.xml:
<?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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF -->
<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>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
有人知道我在哪里失败吗?
组件h:commandButton
的 onclick
属性设置要调用的 Javascript 代码。您想要调用服务器操作,因此必须改用action
。而且,ajax 不是 h:commandButton
的属性,你可能会与p:commandButton
混淆(注意属性ajax
的默认值确实是 true
,所以无论如何你都可以避免它)。f:ajax
中也是如此:您必须在那里传递服务器操作。
<h:commandButton value="Somar" id="botaoSoma" action="#{calcController.soma()}" >