Hi,
I have an action class responsible for form preprocessing:
public class ManageTemplates extends JiraWebActionSupport
method is connected with view:
<div class="field-group"> <label>Select user/s</label> <select id="jiraUser" name="jiraUser" multiple="multiple" class="select"> #foreach ($user in $action.getAllUsers()) <option value="$user.name">$user.displayName ($user.emailAddress)</option> #end </select> </div>
And I want to get form parameters... The easiest way is to get params via request object, but I think that's not best practise. How should I serve request? I would appreciate for source code examples:)
Hi, some webwork example below.
Class AttachLink:
public class AttachLink extends JiraWebActionSupport { private static final long serialVersionUID = 9051214974784096025L; protected Long id; protected boolean process; protected String returnUrl; protected ExternalAttachmentService service; public AttachLink(ExternalAttachmentService service) { this.service = service; } protected void doValidation() { MutableIssue issue = null; try { issue = service.getHelper().getIssueManager().getIssueObject(id); } catch (DataAccessException e) { // Error handled in service (above) } if (!service.canCreateExternalAttachment(getJiraServiceContext(),issue)) { return; } } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public boolean getProcess() { return process; } public void setProcess(boolean process) { this.process = process; } public String getReturnUrl() { return returnUrl; } public void setReturnUrl(String returnUrl) { this.returnUrl = returnUrl; } }
Class AttachURLLink:
public class AttachURLLink extends AttachLink { private static final long serialVersionUID = 7847290991189399627L; private String name; private String value; public AttachURLLink(ExternalAttachmentService service) { super(service); } protected void doValidation() { super.doValidation(); if (hasAnyErrors()) return; if (process) { // Ensure that the name is set and no longer than 255 characters if (!TextUtils.stringSet(name)) { addError("name", getText("validation.error.specify.name")); } else { if (name.length() > 255) { addError("name", getText("validation.error.long.name.value", 255)); } } // Ensure that valid URL is set if (!TextUtils.stringSet(value)) { addError("value", getText("validation.error.specify.value")); } else { if (!TextUtils.verifyUrl(value)) { addError("value", getText("validation.error.invalid.value.url.format")); } } } } @Override @RequiresXsrfCheck protected String doExecute() throws Exception { if (hasAnyErrors())return ERROR; if (process) { return executeAttach(); } else return INPUT; } private String executeAttach() { MutableIssue issue = service.getHelper().getIssueManager() .getIssueObject(id); User user = service.getHelper().getUser(); IssueChangeHolder changeHolder = new DefaultIssueChangeHolder(); ChangeItemBean cib = null; cib = service.create(getJiraServiceContext(), issue, name, value); if (cib != null) { changeHolder.addChangeItem(cib); ChangeLogUtils.createChangeGroup(user, issue, issue, changeHolder.getChangeItems(), true); } if (getHasErrorMessages()) return ERROR; else return getRedirect(getReturnUrl()); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
Template attachurllink.vm
<html> <head> <title>$i18n.getText("attach.url.link.title")</title> </head> <body id="jira" class="nl type-a"> #if($action.getErrorMessages() && !$action.getErrorMessages().isEmpty()) #parse( "/template/plugin/webwork/erroraction.vm" ) #else <div id="main-content"> <div class="active-area"> <div id="primary" class="column"> <div class="content intform"> <form action="AttachURLLink.jspa" method="post" name="jiraform" onsubmit="if (this.submitted) return false; this.submitted = true; return true"> <table class="jiraform maxWidth"> <tbody id="urls"> <tr class="titlerow"> <td colspan="2" class="jiraformheader"> <h3 class="formtitle">$i18n.getText("attach.url.link.title")</h3> </td> </tr> <tr class="descriptionrow"> <td colspan="2" class="jiraformheader"> <div class="aui-message info"> <span class="aui-icon icon-info"></span> <p>$i18n.getText("attach.url.link.notify.info")</p> </div> </td> </tr> <tr class="hidden"> <td> <input type="hidden" id="atl_token" name="atl_token" value="$atl_token"> <input type="hidden" id="id" name="id" value="$action.id"> <input type="hidden" id="process" name="process" value="true"> </td> </tr> #if($action.getHasErrors()) #set($err = $action.getErrors()) #end #macro( errortablerow $errors $key) #if ($errors && $errors.get($key)) <tr> <td class="formErrors">&nbsp;</td> <td valign="top" class="formErrors"> <span class="errMsg">$errors.get($key)</span> </td> </tr> #end #end #set($name = $action.getName()) #set($value = $action.getValue()) #errortablerow( $err "name" ) <tr> <td #if($err && $err.get("name")) class="fieldLabelArea formErrors" #else class="fieldLabelArea" #end> $i18n.getText("attach.url.link.name") <span class="icon icon-required"><span>$i18n.getText("general.field.required")</span></span> </td> <td #if($err && $err.get("name")) class="fieldValueArea formErrors" #else class="fieldValueArea" #end> <input type="text" id="name" name="name" size="40" #if($name) value="$name" #end> </td> </tr> #errortablerow( $err "value" ) <tr> <td #if($err && $err.get("value")) class="fieldLabelArea formErrors" #else class="fieldLabelArea" #end> $i18n.getText("attach.url.link.value") <span class="icon icon-required"><span>$i18n.getText("general.field.required")</span></span> </td> <td #if($err && $err.get("value")) class="fieldValueArea formErrors" #else class="fieldValueArea" #end> <input type="text" id="value" name="value" size="40" #if($value) value="$value" #end> </td> </tr> <tr class="buttons-container"> <td class="jiraformfooter">&nbsp;</td> <td colspan="1"> #set($returnAddress = $action.getReturnUrl()) <input type="hidden" id="returnUrl" name="returnUrl" value="$returnAddress"> <div class="aui-toolbar form-buttons noprint"> <div class="toolbar-group"> <span class="toolbar-item"> <input type="submit" name="$i18n.getText('attach.url.link.attach')" value="$i18n.getText('attach.url.link.attach')" id="attachurl_submit" accesskey="s" title="Press Alt+s to submit form" class="toolbar-trigger"> </span> </div> <div class="toolbar-group"> <span class="toolbar-item toolbar-item-link"> <input type="button" name="$returnAddress" value="$i18n.getText('attach.url.link.cancel')" onclick="location.href='$returnAddress'" id="cancel_button" accesskey="`" title="$i18n.getText('attach.url.link.cancel') (Alt + `)" class="toolbar-trigger"> </span> </div> </div> </td> </tr> </tbody> </table> </form> </div> </div> </div> </div> #end </body> </html>
Template erroraction.vm:
#if($action.getErrorMessages() && !$action.getErrorMessages().isEmpty()) <div id="jira-message-container"> <h1>$i18n.getText("error.action.errors")</h1> <div class="aui-message error"> <span class="aui-icon icon-error"></span> #foreach($err in $action.getErrorMessages()) <p>$err</p> #end </div> </div> #end
atlassian-plugin.xml:
<webwork1 key="action-webwork" name="Attachments Link Action module" class="java.lang.Object"> <description key="action.webwork.desc">Action used to manage external attachments links.</description> <actions> <action name="com.company.jira.plugin.name.web.actions.AttachURLLink" alias="AttachURLLink"> <view name="error">/template/plugin/webwork/attachurllink.vm</view> <view name="input">/template/plugin/webwork/attachurllink.vm</view> </action> </actions> </webwork1>
First URL: "/secure/AttachURLLink.jspa?atl_token=" + atl_token + "&id=" + id + "&returnUrl=/browse/" + issue_key
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.