Я рефакторинга шаблоны строительных лесов, и я врезался в стену с этим вопросом:GRAILS: Можно ли вызвать логику службы из шаблона _FORM.GSP?
Я пытался позвонить в службу (некоторые логики безопасности) из шаблона _FORM.GSP - но в части кода, а не в выходной части
Я прочитал и попробовал то, что было предложено здесь: How do I call a Grails service from a gsp?
- Я пытался использовать TagLib, но мое знание Грааль не может быть достаточно широким для того
- Я попытался надстройка import и def в начало файла _FORM.GSP (оба grailsA прикладная программа и прикладная инстанция службы терпели крах при отсутствии приложения свойств, соответственно. отсутствующее свойство grailsApplication)
- Я даже пытался вызывать taglib из кода как напрямую, так и методом isAllowedToEdit, а также как g.isAllowedToEdit как сбой по неизвестному методу, так и по ошибке. «Такое свойство г»
не кажется, что шаблон _form.gsp имеет различные правила, чем стандартный GSP зрения
Я хочу сделать что-то вроде этого:
private renderFieldForProperty(p, owningClass, prefix = "") {
boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate')
boolean display = true
boolean required = false
if (hasHibernate) {
cp = owningClass.constrainedProperties[p.name]
display = (cp ? cp.display : true)
required = (cp ? !(cp.propertyType in [boolean, Boolean]) && !cp.nullable && (cp.propertyType != String || !cp.blank) : false)
}
/* trying to do this part */
// I want to assign value to cp.editable - so later I can render read-only fields in renderEdit
if (!mySecurityService.canEdit(springSecurityService.currentUser, owningClass.getClass(), actionName, p.name)) {
cp.editable = false
}
/* trying to do this part */
if (display) { %>
<div class="fieldcontain \${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''}">
<label for="${prefix}${p.name}">
<g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" />
<% if (required) { %><span class="required-indicator">*</span><% } %>
</label>
${renderEditor(p)}
</div>
<% } } %>
если есть способ назначить cp.editable - я попробую ваши предложения
Вы попробовали обслуживание в верхней части страницы? – sanghavi7
Да, я добавил import и def поверх _form.gsp - как указано в другой теме, которую я перечислял – hoppo
Я не думаю, что это хороший способ, просто позвоните в службу поддержки с контроллера. – sanghavi7