我是否使用了正确的JSF编码方式?
我是JSF新手。我可以使用这种编码方式而不是在JSF视图中使用EL吗?并纠正我,如果有什么错误,在我的编码或我应该使用更好的方式我是否使用了正确的JSF编码方式?,jsf,backing-beans,entity-bean,Jsf,Backing Beans,Entity Bean,我是JSF新手。我可以使用这种编码方式而不是在JSF视图中使用EL吗?并纠正我,如果有什么错误,在我的编码或我应该使用更好的方式 @Named @RequestScoped public class RegistrationBacking extends Root { @EJB private UserManagerLocal userManager; public String register(){ Map<String, Object>
@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";
}
}
@Named
@请求范围
公共类注册支持扩展根{
@EJB
私有用户管理器本地用户管理器;
公共字符串寄存器(){
映射参数Map=getRequestMap();
用户=新用户();
user.setUserName((字符串)parameterMap.get(“用户名”);
user.setPassword((字符串)parameterMap.get(“密码”);
user.setEmail((字符串)parameterMap.get(“email”);
试一试{
userManager.registerUser(用户);
}catch(UserExistsException-ex){
Logger.getLogger(RegistrationBacking.class.getName()).log(Level.SEVERE,null,ex);
getContext().addMessage(空,新的FacesMessage(FacesMessage.SEVERITY_错误,getBundle().getString(“loginExist”),例如getMessage());
返回null;
}捕获(例外情况除外){
Logger.getLogger(RegistrationBacking.class.getName()).log(Level.SEVERE,null,ex);
getContext().addMessage(空,新的FacesMessage(FacesMessage.SEVERITY_错误,getBundle().getString(“loginError”),例如getMessage());
返回null;
}
返回“索引”;
}
}
否。您基本上是从请求参数映射中手动获取提交的值,而不是将输入值绑定到模型。您正在控制器的操作方法中手动填充模型。您将无法对这些输入执行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>
另见:
null
,并且不能在null
上调用setter方法。这是“方法”,而不是“功能”。这是Java,不是JavaScript或PHP或其他东西。
private User user;
@PostConstruct
public void init() {
user = new User();
}
public String register {
try {
// ...
}
}