我正在JSF中开发一个登录页面。我有两个属性电子邮件和密码。我想要两个java类。一个用于setter和getter,两个用于逻辑。那么,如何从托管bean中分离setter和getter。我的代码是
private String email;
private String password;
private String message;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void login()
{
//logic
}
我想在一个类中使用login()方法,在另一个类中使用setter和getter。以及如何使用.xhtml两个文件。请帮帮我
答案 0 :(得分:1)
如何在JSF中从托管bean中分离getter和setter?
只需引入另一个托管bean,其目的是保存您的数据。
@Named
@ViewScoped
public class LoginModel implements Serializable {
private String userName;
private String password;
//Getters and setters ...
}
@Named
@ViewScoped
public class LoginController implements Serializable {
@Inject
private LoginModel loginData;
public String logIn(){
if(isLoginDataValid(loginData)){
return "index.xhtml";
}
}
}
请确保使用javax.faces.view.ViewScoped
作为注释。请勿使用javax.faces.bean.ViewScoped
。
使用jsf的一部分可能看起来像。
<h:form>
<table>
<tr>
<td>Username:</td>
<td>
<h:inputText value="#{loginModel.userName}"/>
</td>
</tr>
<tr>
<td>Password:</td>
<td>
<h:inputText value="#{loginModel.password}"/>
</td>
</tr>
<tr>
<td></td>
<td>
<h:commandButton value="Login" action="#{loginController.logIn}"/>
</td>
</tr>
</table>
</h:form>
答案 1 :(得分:0)
我不知道将getter和setter分成不同类的解决方案。因为我认为你只是在圈子中运行得到与在其他东西上使用同一个bean的getter和setter相同的语义结果。
现在,对于您的业务逻辑,您始终可以使用不同的类来管理该逻辑。没有什么能阻止你这样做,只要你通过bean方法引用它们,因为这个bean是你的JSF页面的大门。
答案 2 :(得分:0)
首先,请阅读three-tier architecture。您应始终将业务逻辑与表示层分开。在您的情况下,表示层包括jsf页面和托管bean作为控制器。我为您的申请提出以下模板:
创建服务类LoginService
并对其进行注释@Stateless
:
@Stateless
public class LoginService {
public void login() {
//your logic here
}
}
将此EJB注入托管bean:
@EJB private LoginService loginService;
//getters and setters are omitted
public void login() {
loginService.login();
}
上面的模板会将您的业务逻辑与托管bean分开并保持与前端无关(例如,如果您决定将RESTful services添加到您的应用程序,您可以使用EJB注入同样的方式)。并且不要从托管bean中删除getter和setter。托管bean必须是POJO,每个字段都有getter和setter。
答案 3 :(得分:0)
如果它只是冗长,你可以试试lombok framework并注释你的字段,这样就不需要吸气剂和固定剂了
免责声明:我自己没有使用
答案 4 :(得分:-1)
将数据保存在DTO类中,并在Bean类中创建对象和setter getter。并通过xhtml中的Bean类访问DTO类的属性。
Bean类
@SessionScoped
@ManagedBean(name = "loginBean")
public class LoginBean implements Serializable {
LoginDTO loginDTO = new LoginDTO();
public String logIn() {
//here the logic
}
public LoginDTO getLoginDTO() {
return loginDTO;
}
public void setLoginDTO(LoginDTO loginData) {
this.loginDTO = loginData;
}
}
DTO课程
public class LoginDTO {
private String email;
private String password;
private String message;
private String localeCode;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
并访问xhtml中的数据,如value =“#{loginBean.loginDTO.email}”