0

"/resources/components/hostForm.xhtml @25,84 value="#{cc.attrs.host.hostName}": Target Unreachable, 'host' returned null"我添加后出现错误

 <f:validateLength minimum="1" maximum="200"/> 

到自定义标签中的 inputText 字段。没有验证一切正常。

     <!-- INTERFACE -->
    <composite:interface>
        <composite:attribute name="host" />
        <composite:attribute name="prefix" />
    </composite:interface>
    <!-- IMPLEMENTATION -->
    <composite:implementation>
        <h:panelGrid columns="3" columnClasses="titleCell">
            <h:outputLabel for="#{cc.attrs.prefix}hostName" value="Host Name" />
            <h:inputText id="#{cc.attrs.prefix}hostName" value="#{cc.attrs.host.hostName}">
                <f:validateLength minimum="1" maximum="200"/>
                <rich:validator />
            </h:inputText>
            <rich:message for="#{cc.attrs.prefix}hostName" />
        </h:panelGrid>
    </composite:implementation>

该字段声明为

  @Named
  @Produces
  private Host newHost;

自定义标签调用:

<my:hostForm prefix="c" host="#{newHost}"/>

我需要更改什么才能通过验证来完成这项工作?

编辑:

Bean 已经有了@ConversationScoped注解。向字段添加@ConversationScoped注释会导致此错误:

hostForm.xhtml @20,74 value="#{cc.attrs.host.id}": org.jboss.weld.exceptions.IllegalProductException: WELD-000052 不能从非依赖生产者方法返回 null:[field] @命名为@ConversationScoped @Produces

4

2 回答 2

2

尝试为其添加范围,可能是请求或对话。您所拥有的是默认范围,它本质上就像在new每次需要它的实例时创建一个。

于 2013-02-01T14:22:10.533 回答
0

我将注释从属性移到了getter,并自己实例化了对象。这行得通。

@Produces
@Named("newHost")
public Host getNewHost() {
    if ( newHost == null ) {
        newHost = new Host();
    }
    return newHost;
}

https://community.jboss.org/thread/179527

于 2013-02-01T15:26:32.707 回答