小编Ale*_*iro的帖子

@ManagedProperty批注返回null而不是注入属性

一句话:@ManagedProperty注解返回null而不是注入属性。

详细信息:有两个类:

@ManagedBean(name="authFilter")
@SessionScoped
public class AuthFilter implements Filter {
    @ManagedProperty("#{loginBean}")
    private LoginBean loginBean;
    public void setLoginBean(LoginBean loginBean) {
        this.loginBean = loginBean;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean  {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,AFAIK的@ManagedProperty注解和设置器应该足以注入属性,或者至少此处和BalusC的博客中的其他问题建议了这一点,但仍然始终存在null

这也很有趣,并且可能与此问题有关,我收到这些类的警告,即使它们仅通过faces-config.xml或带有注解进行了注册,但它们已经被注册为托管bean 。(分别对它们进行了试验,没有任何区别。)如果它们都不存在,则警告消失,但是对c无效@ManagedProperty

WARNING: JSF1074: Managed bean named 'confListBean' has already been registered. Replacing existing managed bean class type <projectname>.web.authFilter with <projectname>.web.authFilter.
Run Code Online (Sandbox Code Playgroud)

因此,问题将是:

  • @ManagedProperty要注入我没有做的事情还需要什么?
  • 除了@notations和之外,还可以“过度注册”这些托管Bean faces-config.xml吗?是否存在收集我可以检查的托管bean的过程的跟踪?

annotations jsf-2 managed-bean

5
推荐指数
1
解决办法
6107
查看次数

Primefaces selectOneMenu 不显示初始值

我在 中设置了一个带有 POJO 和转换器的 selectOneMenu,p:dialog请参阅下面的源代码。它确实有效,除了最初,当它第一次以非下拉状态显示时,会选择第一个选项,而不是与 bean 值对应的选项。如果我保存 selectOneMenu 的状态而不与之交互,则会保存最初选择的第一个选择,因此实际值会被覆盖,但如果我选择不同的选择,则会正确保存。selectOneMenu 绑定到的 bean 值不能是null

我调试了转换器,结果发现,当加载后备数据并且刷新并显示对话框时,所有选择都会经过转换器,再加上再次getAsString()选择实际 bean 值。尽管如此,第一个选项仍然被实际选中并显示在 selectOneMenu 中。当提交对话框的表单时,实际选择的选择将通过转换器的,无论这是错误选择的初始值还是手动选择的初始值。getAsObject()

请告知可能是什么问题。

调用对话框的按钮的 xhtml,其形式不同:

<p:commandButton id="toolbarEditButton" 
            value="Edit selected" update=":editMediaForm"
            disabled="#{!contentManager.mediaSelected}"
            actionListener="#{contentManager.editSelectedMedia}"
            onclick="PF('editMediaWidget').show()" />
Run Code Online (Sandbox Code Playgroud)

对话框的xhtml:

    <p:dialog id="editMediaDialog" widgetVar="editMediaWidget"
        modal="true" resizable="false" >
        <h:form id="editMediaForm" >
            <p:panelGrid rendered="#{contentManager.isMediaSelected()}" columns="2" >
                ... <!-- other properties of the selected element -->
                <p:outputLabel value="Media type" />
                <p:selectOneMenu value="#{contentManager.selectedMedia.mediaType}"
                                 converter="#{mediaTypeConverter}">
                    <f:selectItems value="#{mediaTypeConverter.allMediaTypes}"
                        var="mt" itemLabel="#{mt.name}" itemValue="#{mt}" />
                    <p:ajax listener="#{contentManager.onMediaTypeChanged()}" />
                </p:selectOneMenu>
            </p:panelGrid> …
Run Code Online (Sandbox Code Playgroud)

jsf selectonemenu primefaces

2
推荐指数
1
解决办法
4147
查看次数