1

我正在尝试学习在 CDI 中使用 @Produces 方法。我制作了非常简单的网络应用程序来测试它。我要做的基本上是在提交表单时将一个bean(Controller)的值传递给另一个(Cont)。

问题在于 str 值永远不会被“注入”。显然还有其他方法可以做到这一点(注入整个控制器),但我正在尝试学习这种特定的方式。

.xhtml

<!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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">


<h:head>
</h:head>

<h:body>
    <h:form>

        <h:outputText value="Input: " />
        <h:inputText value="#{str}" />
        <br />
        <br />

        <h:outputText value="#{cont.str}" />
        <br />
        <br />

        <h:commandButton value="Submit">
        </h:commandButton>
    </h:form>
</h:body>

控制器.java

@Named
@SessionScoped
public class Controller implements Serializable {


    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Produces
    @Named("str")
    private String str;


    public String getStr() {
        return str;
    }


    public void setStr(String str) {
        this.str = str;
    }
}

续java

@Named
@SessionScoped
public class Cont implements Serializable {



    /**
     * 
     */
    private static final long serialVersionUID = 1L;


    @Inject
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }


}
4

1 回答 1

0

改变你h:inputText的使用#{cont.str}

这里使用生产者很尴尬。 @Named总是被评估,最好使用包装对象来处理它。

于 2013-10-22T13:18:03.090 回答