Как отобразить файлы (вызываемые одним методом) после вызова и проверки формы из другого метода?

Мы отображаем файлы в 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', который первоначально отображал файлы в форме и сохранял пользовательский ввод через модель:[..] проблема была решена.

Другие вопросы по тегам