添加验证后,目标无法访问错误

时间:2013-01-30 12:14:21

标签: jsf-2 richfaces facelets cdi composite-component

添加

后发生错误"/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:[字段] @Named @ConversationScoped @Produces

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我将注释从属性移动到getter,并自己实例化对象。这很有效。

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

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