我已经为我的问题寻找解决方案,直到现在还没有得到任何结果。我在Eclipse JEE上创建了一个新的Dynamic Project。我正在尝试创建一个简单的项目:我有3个inputText,其中2个用于我想要求的数字,第3个用于结果。
在我的控制器中,我有sum的操作,可以访问用户输入的2个值或属性numA
和numB
。
但我的问题是,控制器上的值始终为null。我把内置者和吸气剂放在里面,但是没有召集者,只是吸气剂。
这是我的代码:
的index.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;
}
}
faces-config.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>
的web.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>
有人知道我失败的地方吗?
答案 0 :(得分:0)
h:commandButton
组件的onclick
属性设置要调用的Javascript代码。您想要调用服务器操作,因此您必须使用action
。此外,ajax不是h:commandButton
的属性,您可能会对p:commandButton
感到困惑(请注意,属性ajax
的默认值确实是true
,因此您可以避免它在任何情况下)。
f:ajax
中的相同内容:您必须在那里传递服务器操作。
<h:commandButton value="Somar" id="botaoSoma" action="#{calcController.soma()}" >