我已经创建了一个扩展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>
答案 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给了我很多帮助!