现在我使用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;?我甚至愿意安装第三方库
答案 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,这可能与您的工作方式相符或不合适。