Tôi gặp vấn đề với Phiên Grails. Tôi đã suy nghĩ về việc có một lớp dịch vụ để xử lý phiên của tôi. Vì vậy, tôi đã tạo một lớp có tên là "SessionService" (dưới grails-app/services/grails /).Grails nhận Phiên và Quản lý trong lớp Dịch vụ
class SessionService {
static transactional = true
GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()
GrailsHttpSession session = request.session
def setTestvar(String value) {
if (session != null)
session.setAttribute("sTeststring", value)
}
def getTestvar() {
if (session != null)
session.getAttribute("sTeststring")
}
}
Vấn đề là bây giờ, mà tôi nhận được một Nullpointer-Ngoại lệ:. "Phương pháp ném ngoại lệ 'java.lang.NullPointerException' Không thể đánh giá org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession .ToString() ".
Cách sử dụng Lớp dịch vụ của tôi, ví dụ: trong Bộ điều khiển:
class SampleController {
SessionService sessionService
def selectAnything = {
sessionService.setTestvar("test-value")
render(view: "testview")
}
}
Tôi đang làm gì sai ở đây? Có đúng không? Hay tôi phải đặt "session = request.session" trong mọi phương thức?
Hy vọng nhận trợ giúp từ bạn.
Cảm ơn bạn rất nhiều trước.
Chúc mừng,
Marco
Xin chào Christian, cảm ơn. Nhưng không có phương thức "getSession()" trên currentRequestAttributes. Thực hiện "Thao tác phiên (thiết lập/nhận)" trực tiếp có thể dễ xảy ra lỗi, tôi muốn tránh việc đặt tên biến phiên và xử lý ở một nơi ;-) – grailsInvas0r
Làm cách nào bạn kiểm tra xem getSession() có sẵn không? Tôi đã thử mã trong bảng điều khiển grails và nó hoạt động. – user852518
Ồ tôi phải xin lỗi, nó hoạt động. NHƯNG IntelliJ của tôi nhấn mạnh rằng phương pháp này không tồn tại: -O Cũng trong mọi tài liệu, nó không có sẵn. Chỉ các kết quả google OLD mới hiển thị giải pháp này. Tôi không chắc liệu điều này có hiệu quả trong tương lai không ?! Tôi ngạc nhiên: -O Giải pháp của tôi bây giờ là: ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); trả về servletRequestAttributes.getRequest(). GetSession (true); – grailsInvas0r