【问题标题】:How to render files (called in one method) after a form is called and validated from a different method?在从不同的方法调用和验证表单后如何呈现文件(以一种方法调用)?
【发布时间】:2015-02-19 05:40:04
【问题描述】:

我们正在 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']])
    }

【问题讨论】:

    标签: grails groovy gsp


    【解决方案1】:

    对不起,如果这是非常基本的信息,但以下是此用例和解决方案的摘要以供将来参考:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2017-11-14
      • 1970-01-01
      • 2012-03-22
      • 2012-12-24
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多