相关疑难解决方法(0)

如何在@FacesConverter中注入@ EJB,@ PersistenceContext,@ Inject,@ Autowired等?

我怎么可以注入的依赖一样@EJB,@PersistenceContext,@Inject,@AutoWired,等的@FacesConverter?在我的具体情况下,我需要通过@EJB以下方式注入EJB :

@FacesConverter
public class MyConverter implements Converter {

  @EJB
  protected MyService myService;    

  @Override
  public Object getAsObject(FacesContext context, UIComponent component, String value) {
    // myService.doSomething
  }

}
Run Code Online (Sandbox Code Playgroud)

然而,它没有被注射并且仍然存在null,导致NPE.看来,@PersistenceContext@Inject也不起作用.

如何在转换器中注入服务依赖项以便我可以访问数据库?

jsf dependency-injection ejb converter

28
推荐指数
1
解决办法
1万
查看次数

@Inject无法在AttributeConverter中工作

我有一个简单的AttributeConverter实现,我尝试注入一个必须提供转换逻辑的对象,但@Inject似乎不适用于这种情况.转换器类看起来像这样:

@Converter(autoApply=false)
public class String2ByteArrayConverter implements AttributeConverter<String, byte[]>
{
    @Inject
    private Crypto crypto;

    @Override
    public byte[] convertToDatabaseColumn(String usrReadable) 
    {
        return crypto.pg_encrypt(usrReadable);
    }

    @Override
    public String convertToEntityAttribute(byte[] dbType)
    {
        return crypto.pg_decrypt(dbType);
    }
}
Run Code Online (Sandbox Code Playgroud)

@Converter触发它时会抛出一个NullPointerException因为该属性crypto没有从容器初始化.这是为什么?

我正在使用Glassfish 4,在所有其他情况下@Inject工作得很好.

是否无法在转换器上使用CDI?

任何帮助将不胜感激 :)


我的问题的重点是AttributeConverter部分.我知道,要使CDI工作,bean必须满足http://docs.oracle.com/javaee/6/tutorial/doc/gjfzi.html所述的条件.我也尝试通过实现以下构造函数来强制CDI工作:

@Inject
public String2ByteArrayConverter(Crypto crypto) 
{
    this.crypto = crypto;
}
Run Code Online (Sandbox Code Playgroud)

现在我得到以下异常,但没有给我任何线索:

2015-07-23T01:03:24.835+0200|Severe: Exception during life cycle processing
org.glassfish.deployment.common.DeploymentException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: …
Run Code Online (Sandbox Code Playgroud)

jpa glassfish converter cdi

5
推荐指数
2
解决办法
2681
查看次数

'null Converter'的转换错误设置值"UserID"

尝试从我的应用程序中的表中删除或编辑用户时出现转换错误.该值将从元数据传递listUser.xhmtldeleteUser.xhtml页面.该值正在元数据中传递,但出于某种原因,在调用delete操作时,我得到了Conversion Error setting value "someemail@somedomain.com" for 'null Converter'.用户标识是String.

这是请求userDelete.xhmtl后的url:

http://localhost:8080/lavpWebApp/user/deleteUser.xhtml?user=someemail%40somedomain.com
Run Code Online (Sandbox Code Playgroud)

这是userList.xhmtl简化:

<h:column>
                            <f:facet name="header">Edit</f:facet>
                            <h:link outcome="/user/editUser.xhtml" value="Edit User">
                                <f:param name="user" value="#{item.email}"/>
                            </h:link>                            
                        </h:column>

                        <h:column>
                            <f:facet name="header">Delete</f:facet>
                            <h:link outcome="/user/deleteUser.xhtml" value="Delete User">
                                <f:param name="user" value="#{item.email}"/>
                            </h:link>
                        </h:column>
Run Code Online (Sandbox Code Playgroud)

这是userDelete.xhtml简化:

<f:metadata>
        <f:viewParam name="user" value="#{userController.user}" converter="#{userConverter}"/>
    </f:metadata>

    <h:body>
        Do you want to delete #{userController.user.name}?
        <h:form>
            <h:commandButton action="#{userController.deleteUser()}"
                             value="Delete"/>
            <h:commandButton action="#{userController.doCancelDeleteUser()}"
                             value ="Cancel"/>
        </h:form>
    </h:body>
Run Code Online (Sandbox Code Playgroud)

这是Converter类:

@ManagedBean
@FacesConverter(value="userConverter")
public class UserConverter implements Converter{

    @EJB
    private UserSellerEJB userEjb;

    @Override
    public Object …
Run Code Online (Sandbox Code Playgroud)

jsf metadata converter javabeans java-ee

4
推荐指数
1
解决办法
7276
查看次数

Bean没有在EJB 3.1中注入,只有这个bean有这种行为

1和JSF 2.0 + primefaces很酷:D

我有这个验证器,但我不能正确地注入持久性单元.

所有其他bean都正常工作,这是唯一没有的,它给了我一个Nullpointer roleFacade

注入验证器是非法的吗?是否在生命周期中过早?它能是什么?

谢谢 !

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;


@FacesConverter("rolesConverter")
@Stateless
public class RolesConverter implements Converter{

@EJB
private RoleFacade roleFacade;

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
        Roles role = null;
        if ((value != null) && (!value.equals(""))) {       
             role = roleFacade.find(Long.valueOf(value));       
        }
        return role;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
        Integer retorno = null;
        if (!(value == null)) { …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection ejb ejb-3.0 ejb-3.1

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

如何在自定义Converter中访问EJB bean

converter是从我的JSF调用的.我已在里面注册了faces-config.xml

public class ProjectConverter implements Converter{

    @EJB
    DocumentSBean sBean;

    @ManagedProperty(value="#{logging}")
    private Logging log;    

    public ProjectConverter(){
    }

    public Object getAsObject(FacesContext context, UIComponent component, String value) 
    {
        if(value.trim().equals("")){
            return null;
        }
        return sBean.getProjectById(value);

    }

    public String getAsString(FacesContext context, UIComponent component, Object value) 
    {
        if(value == null){
            return null;
        }
        return String.valueOf(((Project) value).getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到了java.lang.NullPointerException,当我进入时getAsObject(),主要原因是因为我的会话Bean sBean为空.我不知道如何解决这个问题,我需要访问我的Session bean,以便我可以从我的数据库中查询

java jsf converter java-ee ejb-3.0

0
推荐指数
1
解决办法
7521
查看次数