Как отобразить файлы (вызываемые одним методом) после вызова и проверки формы из другого метода?
Мы отображаем файлы в gsp. Файлы извлекаются из серверной части следующим образом:
Посмотреть
<table>
<tr>
<th>Attachment:
<td>
<g:each in="${lstAttachment}" var="nonOracleAttachmentItem">
<g:link id="${nonOracleAttachmentItem.Id}" action="nonOracleAttachment" params="[nonOracleAttachmentItemId: nonOracleAttachmentItem.Id,nonOracleAttachmentItemName: nonOracleAttachmentItem.Name]">${nonOracleAttachmentItem.Name}</g:link><br/>
</g:each>
</td>
</tr>
</table>
контроллер
def show(){
def strAttachmentsName = null;
def boolAttachment = objChangeControl.Attachment__c
def strOrcAttachmentName = objChangeControl.Attachment_Name__c
if(strOrcAttachmentName !=null){
def lstOracleAttachment = salesforceService.getSObjectList(SFDC_ORG, "SELECT Id,Name from Attachment where ParentId='${idG}' AND Name='$strOrcAttachmentName'")
def lstAttachment = salesforceService.getSObjectList(SFDC_ORG, "SELECT Id,Name from Attachment where ParentId='${idG}' AND Name != '$strOrcAttachmentName'")
def oracleAttachmentId = lstOracleAttachment[0].Id
def oracleAttachmentName = lstOracleAttachment[0].Name
[oracleAttachmentId:oracleAttachmentId, oracleAttachmentName: oracleAttachmentName,lstAttachment:lstAttachment,grcInstance: objGRCChangeControl,updatedRAIInstance: objUpdatedRAI, strConfigurationOwner:strConfigurationOwner,strGRCStatusCustomSetting:strGRCStatusCustomSetting,sfUserName: session["${SFDC_ORG}UserName"],sfUserId:sfUserId]
}else{
def lstAttachment = salesforceService.getSObjectList(SFDC_ORG, "SELECT Id,Name from Attachment where ParentId='${idG}'")
[lstAttachment:lstAttachment,grcInstance: objGRCChangeControl,updatedRAIInstance: objUpdatedRAI, strConfigurationOwner:strConfigurationOwner,strGRCStatusCustomSetting:strGRCStatusCustomSetting,sfUserName: session["${SFDC_ORG}UserName"],sfUserId:sfUserId]
}
}
Это все хорошо, за исключением случаев, когда поле в форме не проходит проверку, и нам нужно сохранить все значения полей вместе с файлами, которые были изначально отображены. Вот блок catch (внутри метода, вызываемого после нажатия кнопки "Отправить"), который отображает ошибку, а также отображает значения, введенные пользователем до ошибки проверки. Как я могу отрендерить файлы?
def submitGRCRecord(){
try{
......
}
catch (Exception e){
render(action:"show",model:[sfUserName: session["${SFDC_ORG}UserName"], sfUserId: session["${SFDC_ORG}UserId"],encodedId:encodedIdParam,grcInstance: getGRCRecord(),inputITGNumber:inputITGNumber,inputJustification:inputJustification,attmtChecked: 'true',lstAttachment:params['lstAttachment']])
}
1 ответ
Извините, если это очень базовая информация, но ниже приводится краткое описание этого варианта использования и решения для дальнейшего использования:
Пользователь получает электронное письмо со ссылкой /URL на форму, где ему необходимо предоставить определенную информацию. URL-адрес всегда будет иметь следующий формат: Например, https://testchain.tstrandomurl.com/Folder1/show?encodedId=qwerty12345 Форма будет отображать некоторую существующую информацию из записи в базе данных. Идентификатор записи (уникальный идентификатор) извлекается из кодированного идентификатора в URL. Существующая "информация" включает в себя, помимо прочего, набор файлов, которые должны отображаться в виде загружаемой ссылки.
Кроме того, форма также имеет несколько полей, требующих ввода данных пользователем. Объяснение изменений: - длинное текстовое поле и дополнительные связанные вложения: - заполнитель для загрузки файла.
Объяснение изменений имеет ограничение в 256 символов. К одной и той же записи можно было обращаться несколько раз, и каждый раз, когда пользователю нужно было вводить новое объяснение изменений, она будет считаться с общим пределом символов, который также включал предыдущий ввод. Таким образом, когда общее ограничение по количеству символов достигнуто, стандартное сообщение об ошибке было отправлено обратно в представление с помощью flash.message. Кроме того, у нас была еще одна проверка для перекрестной проверки имени файла дополнительного связанного вложения с уже существующими файлами в базе данных.
При отправке сообщения об ошибке после проверки ввода формы все первоначальное значение (кроме загруженного файла) необходимо было сохранить в форме.
Это было достигнуто с помощью цепного метода с действием, параметрами и моделью: chain(action:'show',params:[encodedId:encodedIdParam],model: [UserName: session["${ORG}UserName"], UserId: session["${ORG}UserId"] ,inputExplainChanges:inputExplainChanges])
Используя цепной метод для вызова метода 'show', который первоначально отображал файлы в форме и сохранял пользовательский ввод через модель:[..] проблема была решена.