添加
后发生错误"/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
答案 0 :(得分:2)
尝试向其添加范围,可能是请求或对话。你拥有的是默认范围,本质上就像每次需要它的实例时用new
创建一个范围。
答案 1 :(得分:0)
我将注释从属性移动到getter,并自己实例化对象。这很有效。
@Produces
@Named("newHost")
public Host getNewHost() {
if ( newHost == null ) {
newHost = new Host();
}
return newHost;
}