财产没有设定

时间:2014-03-31 19:32:44

标签: jsf java-ee

我已经为我的问题寻找解决方案,直到现在还没有得到任何结果。我在Eclipse JEE上创建了一个新的Dynamic Project。我正在尝试创建一个简单的项目:我有3个inputText,其中2个用于我想要求的数字,第3个用于结果。

在我的控制器中,我有sum的操作,可以访问用户输入的2个值或属性numAnumB

但我的问题是,控制器上的值始终为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>

有人知道我失败的地方吗?

1 个答案:

答案 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()}" >