Activiti - 如何从扩展EnumFormType的自定义表单类型中获取信息,例如" values"?

时间:2015-05-01 09:42:25

标签: java jsp activiti

我已经创建了一个扩展EnumFormType的自定义表单类型,我假设我能够使用方法getInformation("values"),但它会返回null。基本上我需要能够获得在Activiti designer for eclipse中的表单属性窗口中设置的值。

我的自定义表单类型:

import java.util.Map;

import org.activiti.engine.impl.form.EnumFormType;

public class ImpactedSitesFormType  extends EnumFormType {

    private static final long serialVersionUID = 1L;
    public static final String TYPE_NAME = "impactedSite";

    public ImpactedSitesFormType() {

        this(null);

    }

     public ImpactedSitesFormType(Map<String, String> values) {
    super(values);
    // TODO Auto-generated constructor stub
     }

     public String getName() {
       return TYPE_NAME;
     }

     public Object convertFormValueToModelValue(String propertyValue) {
       Integer impactedSite = Integer.valueOf(propertyValue);
       return impactedSite;
     }

     public String convertModelValueToFormValue(Object modelValue) {
       if (modelValue == null) {
         return null;
       }
       return modelValue.toString();

     }

   }

我的JSP代码:

<c:if test="${type == 'impactedSite'}">
    <select name="${property.getId()}">
        <c:forEach var="entry" items='${property.getType().getInformation("values")}'>
            <option value="${entry.key}">${entry.value}</option>
        </c:forEach>
    </select><br /><br />
</c:if>

1 个答案:

答案 0 :(得分:1)

我今天遇到了同样的问题 - 这是我的两分钱:

最有可能的是,您在activiti.cfg.xml注册自定义类型,如:

<property name="customFormTypes">
  <list>
    <bean class="org.yourdomain.ImpactedSitesFormType" />
    ...
  </list>
</property>

右?这将使用默认构造函数创建一个实例,您可以在其中将值显式设置为null

不幸的是,不可能鼓励Activiti调用您的其他构造函数。相反,您必须使用自定义FormTypes实现并手动执行初始化:

public class CustomFormTypes extends FormTypes {

    public CustomFormTypes() {
        // register Activiti's default form types
        addFormType(new StringFormType());
        addFormType(new LongFormType());
        addFormType(new DateFormType("dd/MM/yyyy"));
        addFormType(new BooleanFormType());
        addFormType(new DoubleFormType());
    }

    @Override
    public AbstractFormType parseFormPropertyType(FormProperty formProperty) {
        if (ImpactedSitesFormType.TYPE_NAME.equals(formProperty.getType())) {
            Map<String, String> values = new LinkedHashMap<>();
            for (FormValue formValue : formProperty.getFormValues()) {
                values.put(formValue.getId(), formValue.getName());
            }
            return new ImpactedSitesFormType(values);
        } else {
            // delegate construction of all other types
            return super.parseFormPropertyType(formProperty);
        }
    }

}

要让您的CustomFormTypes类为Activiti所知,请在activiti.cfg.xml中对其进行配置:

<property name="formTypes">
    <bean class="org.yourdomain.CustomFormTypes" />
</property>

This blog post及其example code on GitHub给了我很多帮助!