在MVC範例可以完美具有在應用範圍的控制器(如一個Servlet
已經默認是)時,代表類只應該不含有與請求相關聯的字段範圍的變量。你應該在方法塊中聲明它們。
因此不例如
public class Controller {
private SomeObject field; // Not threadsafe as this will be shared among all requests!
public void control(Request request, Response response) {
this.field = request.getSomething();
}
}
但越是這樣
public class Controller {
public void control(Request request, Response response) {
SomeObject field = request.getSomething(); // Threadsafe.
}
}
的View
和相關聯的Action
應處理的ThreadLocal,即聲明在方法塊中。例如。
public class Controller {
public void control(Request request, Response response) {
View view = new View(request, response);
Action action = ActionFactory.getAction(request);
action.execute(view);
view.navigate();
}
}
Model
的是在Action
類進行處理,同樣在ThreadLocal的範圍。
public class SomeAction implements Action {
public void execute(View view) {
Model model = new Model();
// ...
}
}
在你事實上JSF上下文只擁有Model
類,這是在本質上沒有什麼比一個支持bean更多。Controller
和View
零件已由JSF處理,並且幫助FacesServlet
控制請求/響應/生命週期/操作以及從JSF頁面構建的UIViewRoot
。因此,對於請求作用域數據,您的JSF bean應該是請求作用域。
感謝您的回答。也許你還知道這些東西描述的一些文章?附:這不是'我的管理員',我只是在調查現有項目。 – Roman 2009-12-24 11:49:05
這是一個很棒的how-to + spring + jsf + hibernate http://thelabdude.blogspot.com/2009/04/user-authentication-registration-with.html – Bozho 2009-12-24 11:52:41
不錯的文章,有很多有用的東西。 – Roman 2009-12-24 12:46:54