मैं वर्तमान में एक Grails आवेदन विकसित कर रहा हूँ और मैं वसंत सुरक्षा और यूआई प्लग-इन के साथ काम कर रहा हूँ।Grails - grails flushing से पहले क्षणिक उदाहरण बचाओ त्रुटि?
उपयोगकर्ता वर्ग::
class User {
transient springSecurityService
String username
String email
String password
boolean enabled
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static belongsTo = [area:Areas]
.......
}
क्षेत्र कक्षा:
class Areas {
String name
static hasMany = [users:User]
}
आप देख सकते हैं मैं उपयोगकर्ता क्लास और एक अन्य क्षेत्र कक्षा मैं जो नीचे देखा जा सकता है है के बीच संबंधों को बनाया है कक्षाओं से एक उपयोगकर्ता को एक क्षेत्र से जोड़ा जा सकता है लेकिन एक क्षेत्र में कई उपयोगकर्ता हो सकते हैं। यह सब ठीक काम करता है और जब मैं एप्लिकेशन को बूटस्ट्रैप करता हूं तो सभी डेटा सही ढंग से जोड़े जाते हैं।
object references an unsaved transient instance - save the transient instance before flushing: com.website.Area
नीचे
नियंत्रक कोड मैं जानकारी को बचाने के लिए उपयोग कर रहा हूँ है: लेकिन मैं निम्नलिखित त्रुटि जब मैं एक फार्म का उपयोग करने के लिए एक नया उपयोगकर्ता बनाने की कोशिश मिल
def save = {
def user = lookupUserClass().newInstance(params)
if (params.password) {
String salt = saltSource instanceof NullSaltSource ? null : params.username
user.password = springSecurityUiService.encodePassword(params.password, salt)
}
if (!user.save(flush: true)) {
render view: 'create', model: [user: user, authorityList: sortedRoles()]
return
}
addRoles(user)
flash.message = "${message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), user.id])}"
redirect action: edit, id: user.id
}
और यहाँ एक है
<table>
<tbody>
<s2ui:textFieldRow name='username' labelCode='user.username.label' bean="${user}"
labelCodeDefault='Username' value="${user?.username}"/>
<s2ui:passwordFieldRow name='password' labelCode='user.password.label' bean="${user}"
labelCodeDefault='Password' value="${user?.password}"/>
<s2ui:textFieldRow name='email' labelCode='user.email.label' bean="${user}"
labelCodeDefault='E-Mail' value="${user?.email}"/>
<s2ui:textFieldRow readonly='yes' name='area.name' labelCode='user.area.label' bean="${user}"
labelCodeDefault='Department' value="${area.name}"/>
<s2ui:checkboxRow name='enabled' labelCode='user.enabled.label' bean="${user}"
labelCodeDefault='Enabled' value="${user?.enabled}"/>
<s2ui:checkboxRow name='accountExpired' labelCode='user.accountExpired.label' bean="${user}"
labelCodeDefault='Account Expired' value="${user?.accountExpired}"/>
<s2ui:checkboxRow name='accountLocked' labelCode='user.accountLocked.label' bean="${user}"
labelCodeDefault='Account Locked' value="${user?.accountLocked}"/>
<s2ui:checkboxRow name='passwordExpired' labelCode='user.passwordExpired.label' bean="${user}"
labelCodeDefault='Password Expired' value="${user?.passwordExpired}"/>
</tbody>
</table>
मैं इस में देखा है और मेरा मानना है कि जिस तरह से मैं एक GORM वस्तु को बचाने के लिए कोशिश कर रहा हूँ और मैं शायद बचाने के लिए प्रयास करने से पहले माता-पिता (क्षेत्र) को बचाने चाहिए: क्या जीएसपी तरह लग रहा है का नमूना उपयोगकर्ता। हालांकि उपयोगकर्ता को बनाए जाने से पहले क्षेत्र हमेशा मौजूद रहेगा, इसलिए मुझे फिर से बनाए जाने वाले क्षेत्र की आवश्यकता नहीं है, मैं इसे कैसे संभाल सकता हूं? मैंने थोड़ी सी सफलता के साथ "withTransaction" फ़ंक्शन की कोशिश की, साथ ही
यदि संभव हो तो मैं वास्तव में कुछ मदद की सराहना करता हूं।
धन्यवाद
संपादित करें ......
मैं नियंत्रक में इस लाइन के लिए इस मुद्दे पर नज़र रखी है:
RegistrationCode registrationCode = springSecurityUiService.register(user, command.password, salt)
यह मेरे लिए कहना है कि यह समारोह एक को बचाने बुला रहा है उपयोगकर्ता ऑब्जेक्ट के लिए फ़ंक्शन, हालांकि जगहों के संबंधों के साथ इसे पहले क्षेत्र को सहेजने की आवश्यकता है। क्या कोई इस पर मेरी सहायता करने के लिए SpringSecurityUi को जानता है?
धन्यवाद
स्प्रिंगसेक्योरिटी सेवा को नियंत्रक में रखें, न कि डोमेन-क्लास। – marko
क्या आप मुझे एक उदाहरण दे सकते हैं? चूंकि springsecurityservice हमेशा वहां रहा है – user723858
क्या त्रुटि "com.website.Area" वर्ग से संबंधित नहीं है जैसे त्रुटि कहती है? धन्यवाद – user723858