使用注释在Spring管理的bean中注入JSF请求参数

时间:2014-03-19 10:04:39

标签: java spring jsf

现在我使用f:viewParam标记将请求参数注入我的bean的字段

<f:viewParam name="id" value="#{surveyController.id}" />

但我更愿意为此使用注释。我知道@Value注释,我想我可以做这样的事情

@Component
@Scope("view")
public class SurveyControlador {
    @Value("#{new Long.parseLong('${param.id}')}")
    private Long id;

    ....
}

但这简直太丑了。

有没有更好的方法,我不需要明确转换价值,甚至可能省略&#34; param&#34;?我甚至愿意安装第三方库

1 个答案:

答案 0 :(得分:1)

我使用过omnifaces&#39; @Param成功,如此:

@Named @ViewScoped
public class SurveyController {
    @Inject @Param(name = "id")
    private ParamValue<Long> idParam;

    public void doStuff() {
        if (idParam.getValue().equals(1)) {
            throw new IllegalAccessException("you don't dare");
        }
    }
}

专业版:您还可以访问原始提交的值,并且omnifaces可选择应用验证/转换(检查文档)。

Con:围绕您的真实参数的包装。如果你想保留导航参数,你仍然需要指定<f:viewParam>(你不需要将它绑定到支持bean,tho)。

请注意,这会利用CDI,这可能与您的工作方式相符或不合适。