我通过以下代码为@RequestParameter创建了Producer:

@Produces
@RequestParameter
public String getStringParameter(InjectionPoint injectionPoint){
    String name = injectionPoint.getAnnotated().getAnnotation(RequestParameter.class).value();

    if("".equals(name)){
        name = injectionPoint.getMember().getName();
    }

    FacesContext facesContext = FacesContext.getCurrentInstance();
    if(facesContext == null){
        return "";
    }

    return facesContext.getExternalContext().getRequestParameterMap().get(name);
}

Usage:

@ConversationScope
class bean{
   @Inject
   @RequestParameter("ParamX")
   private String paramX;
}


我希望在请求处理后,变量paramX将变为null。但是我不能使用@Disposes作为以下代码,当我在Glassfish中部署耳文件时会发生异常。

public void close(@Disposes String value) {
   value=null;
}


在这种情况下我该怎么办?感谢您的提示。

最佳答案

处置程序方法允许应用程序对生产者方法返回的对象执行自定义清除。


https://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Disposes.html

例如,对于需要正确清理的文件或数据库连接,可能需要这样做。

在您的情况下,可以在您的bean中使用自己的作用域调用生产者方法。因此,在销毁bean时将销毁String。您不必自己做。

请记住,您可以通过定义注释来限定生产者,以防止对其他生产者方法的干扰。然后,只有在注入点和生产者方法中存在限定符注释时,才会调用生产者。

https://docs.oracle.com/javaee/6/tutorial/doc/gjbck.html

10-06 07:05