Form preprocess - jira

b
Contributor
March 28, 2012

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:)

 

 

 

1 answer

1 accepted

2 votes
Answer accepted
Radek Kantor
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
March 28, 2012

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() &gt; 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

&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;$i18n.getText("attach.url.link.title")&lt;/title&gt;
    &lt;/head&gt;
    
    &lt;body id="jira" class="nl type-a"&gt;
    
    #if($action.getErrorMessages() &amp;&amp; !$action.getErrorMessages().isEmpty())
    	#parse( "/template/plugin/webwork/erroraction.vm" )
    #else

	&lt;div id="main-content"&gt;
    	&lt;div class="active-area"&gt; 
    	
    		&lt;div id="primary" class="column"&gt;
                &lt;div class="content intform"&gt;
                
                &lt;form action="AttachURLLink.jspa" method="post" name="jiraform" onsubmit="if (this.submitted) return false; this.submitted = true; return true"&gt;
    
				&lt;table class="jiraform maxWidth"&gt;
					&lt;tbody id="urls"&gt;
						&lt;tr class="titlerow"&gt;
							&lt;td colspan="2" class="jiraformheader"&gt;
        						&lt;h3 class="formtitle"&gt;$i18n.getText("attach.url.link.title")&lt;/h3&gt;
        					&lt;/td&gt;
						&lt;/tr&gt;
	
						&lt;tr class="descriptionrow"&gt;
							&lt;td colspan="2" class="jiraformheader"&gt;
								&lt;div class="aui-message info"&gt;
									&lt;span class="aui-icon icon-info"&gt;&lt;/span&gt;
									&lt;p&gt;$i18n.getText("attach.url.link.notify.info")&lt;/p&gt;
								&lt;/div&gt;
        					&lt;/td&gt;
						&lt;/tr&gt;
						
    					&lt;tr class="hidden"&gt;
							&lt;td&gt;
								&lt;input type="hidden" id="atl_token" name="atl_token" value="$atl_token"&gt;
								&lt;input type="hidden" id="id" name="id" value="$action.id"&gt;
								&lt;input type="hidden" id="process" name="process" value="true"&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
    					
    					#if($action.getHasErrors())
							#set($err = $action.getErrors())
						#end
    
    					#macro( errortablerow $errors $key)
							#if ($errors &amp;&amp; $errors.get($key))
								&lt;tr&gt;
                					&lt;td class="formErrors"&gt;&amp;nbsp;&lt;/td&gt;
            						&lt;td valign="top" class="formErrors"&gt;
										&lt;span class="errMsg"&gt;$errors.get($key)&lt;/span&gt;
									&lt;/td&gt;
            					&lt;/tr&gt;
							#end
						#end
    
    					#set($name = $action.getName())
    					#set($value = $action.getValue())
							
						#errortablerow( $err "name" )		
						&lt;tr&gt;
							&lt;td #if($err &amp;&amp; $err.get("name")) class="fieldLabelArea formErrors" #else class="fieldLabelArea" #end&gt;
								$i18n.getText("attach.url.link.name")
                            	&lt;span class="icon icon-required"&gt;&lt;span&gt;$i18n.getText("general.field.required")&lt;/span&gt;&lt;/span&gt;
                            &lt;/td&gt;
                            &lt;td #if($err &amp;&amp; $err.get("name")) class="fieldValueArea formErrors" #else class="fieldValueArea" #end&gt;
								&lt;input type="text" id="name" name="name" size="40" #if($name) value="$name" #end&gt;
                            &lt;/td&gt;  
						&lt;/tr&gt;
								
						#errortablerow( $err "value" )
						&lt;tr&gt;
							&lt;td #if($err &amp;&amp; $err.get("value")) class="fieldLabelArea formErrors" #else class="fieldLabelArea" #end&gt;
                            	$i18n.getText("attach.url.link.value")
                            	&lt;span class="icon icon-required"&gt;&lt;span&gt;$i18n.getText("general.field.required")&lt;/span&gt;&lt;/span&gt;
                            &lt;/td&gt;
                            &lt;td #if($err &amp;&amp; $err.get("value")) class="fieldValueArea formErrors" #else class="fieldValueArea" #end&gt;
								&lt;input type="text" id="value" name="value" size="40" #if($value) value="$value" #end&gt;
                            &lt;/td&gt; 
						&lt;/tr&gt;
						
    					&lt;tr class="buttons-container"&gt;
        					&lt;td class="jiraformfooter"&gt;&amp;nbsp;&lt;/td&gt;
        					&lt;td colspan="1"&gt;
        					
								#set($returnAddress = $action.getReturnUrl())
								&lt;input type="hidden" id="returnUrl" name="returnUrl" value="$returnAddress"&gt;

            					&lt;div class="aui-toolbar form-buttons noprint"&gt;
                					&lt;div class="toolbar-group"&gt;
                    					&lt;span class="toolbar-item"&gt;
                        					&lt;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"&gt;
                    					&lt;/span&gt;
                					&lt;/div&gt;
                					&lt;div class="toolbar-group"&gt;
                    					&lt;span class="toolbar-item toolbar-item-link"&gt;
											&lt;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"&gt;
                    					&lt;/span&gt;
                					&lt;/div&gt;
            					&lt;/div&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
    			&lt;/table&gt;
	
				&lt;/form&gt;            
                
                &lt;/div&gt;
            &lt;/div&gt;
       	&lt;/div&gt;
    &lt;/div&gt;    
    
    #end
    	
	&lt;/body&gt;
	
&lt;/html&gt;

Template erroraction.vm:

#if($action.getErrorMessages() &amp;&amp; !$action.getErrorMessages().isEmpty())

&lt;div id="jira-message-container"&gt;
    &lt;h1&gt;$i18n.getText("error.action.errors")&lt;/h1&gt;
	&lt;div class="aui-message error"&gt;
		&lt;span class="aui-icon icon-error"&gt;&lt;/span&gt;
		#foreach($err in $action.getErrorMessages())
			&lt;p&gt;$err&lt;/p&gt;
        #end
    &lt;/div&gt;
&lt;/div&gt;

#end

atlassian-plugin.xml:

&lt;webwork1 key="action-webwork" name="Attachments Link Action module"
		class="java.lang.Object"&gt;
		&lt;description key="action.webwork.desc"&gt;Action used to manage external attachments links.&lt;/description&gt;
		&lt;actions&gt;
			&lt;action name="com.company.jira.plugin.name.web.actions.AttachURLLink"
				alias="AttachURLLink"&gt;
				&lt;view name="error"&gt;/template/plugin/webwork/attachurllink.vm&lt;/view&gt;
				&lt;view name="input"&gt;/template/plugin/webwork/attachurllink.vm&lt;/view&gt;
			&lt;/action&gt;
		&lt;/actions&gt;
	&lt;/webwork1&gt;

First URL: "/secure/AttachURLLink.jspa?atl_token=" + atl_token + "&id=" + id + "&returnUrl=/browse/" + issue_key

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events