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.