如何在调用表单并从其他方法验证后呈现文件(在一个方法中调用)?

时间:2015-02-19 05:40:04

标签: grails groovy gsp

我们正在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块(在按下&#39; Submit&#39;按钮后调用的方法内),它显示错误并在验证错误之前呈现用户输入的值。我怎样才能渲染文件?

 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 个答案:

答案 0 :(得分:0)

很抱歉,如果这是非常基本的信息,请参阅此用例和解决方案的摘要以供将来参考:

用户会收到一封电子邮件,其中包含指向需要提供特定信息的表单的链接/ URL。 URL始终采用以下格式: 例如。: https://testchain.tstrandomurl.com/Folder1/show?encodedId=qwerty12345 表单将显示数据库中记录的一些现有信息。记录id(唯一标识符)是从URL中的encodedId中提取的。现有的“信息”包括但不限于需要显示为可下载链接的一堆文件。

此外,表单还有几个字段,需要用户输入更改说明: - 长文本字段和其他相关附件: - 文件上载占位符。

更改说明有256个字符限制。可以多次访问同一记录,每次用户需要输入新的更改说明时,它将计入包含先前输入的总字符数限制。因此,当达到总字符数限制时,使用flash.message将标准错误消息发送回视图。此外,我们还有另一项检查,以针对数据库中的预先存在的文件交叉检查附加相关附件的文件名。

在表单输入验证后发送错误消息时,所有原始值(上载文件除外)都需要保留在表单中。

这是通过使用带有action,params和模型的链式方法实现的:chain(action:'show',params:[encodedId:encodedIdParam],model: [UserName: session["${ORG}UserName"], UserId: session["${ORG}UserId"] ,inputExplainChanges:inputExplainChanges])

使用链式方法调用'show'方法,该方法最初显示表单中的文件并通过模型保留用户输入:[..]问题已解决。