我是JSF的新人。我可以使用这种编码方式而不是在JSF视图中使用EL吗?如果我的编码有问题或者我应该使用更好的方法,请纠正我。
@Named
@RequestScoped
public class RegistrationBacking extends Root {
@EJB
private UserManagerLocal userManager;
public String register(){
Map<String, Object> parameterMap = getRequestMap();
User user = new User();
user.setUserName((String) parameterMap.get("userName"));
user.setPassword((String) parameterMap.get("password"));
user.setEmail((String) parameterMap.get("email"));
try{
userManager.registerUser(user);
} catch(UserExistsException ex) {
Logger.getLogger(RegistrationBacking.class.getName()).log(Level.SEVERE, null, ex);
getContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, getBundle().getString("loginExist"), ex.getMessage()));
return null;
} catch(Exception ex) {
Logger.getLogger(RegistrationBacking.class.getName()).log(Level.SEVERE, null, ex);
getContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, getBundle().getString("loginError"), ex.getMessage()));
return null;
}
return "index";
}
}
答案 0 :(得分:1)
没有。您基本上手动从请求参数映射中抓取提交的值,而不是将输入值绑定到模型。您可以在控制器的操作方法中手动填充模型。您无法对这些输入执行JSF管理的转换和Bean验证。
正确的方法如下:
<h:form>
<h:inputText value="#{registrationBacking.user.userName}" />
<h:inputSecret value="#{registrationBacking.user.password}" />
<h:inputText value="#{registrationBacking.user.email}" />
<h:commandButton value="Register" action="#{registrationBacking.register}" />
</h:form>
然后在支持bean中:
private User user;
@PostConstruct
public void init() {
user = new User();
}
public String register {
try {
// ...
}
}