2

使用: Spring 3.2 ポートレット MVC と Liferay 5.2.3 および Tomcat 6.0.18

Set<Type>と の間で変換する PropertyEditor を作成しようとしていますString。無事Set<Type>String仕事に就くことができました。しかし、プロパティ エディタを逆方向に認識させることができません。Type-> String->でこれを成功させましたTypeが、 a の変換を行うことSetは私を避けています。

SetAsText メソッドが呼び出されていないと判断したため、変換が行われなかったことを示す実行時エラーが発生しました。propertyEditors に関する情報は非常にまばらで、1 つまたは 2 つの例外を除いて、私が見つけることができたあいまいに関連する問題は 4 年以上前のものだけです。

見えないほど基本的なものが欠けているか、フレームワークの奥深くにあるものですが、何か助けや提案があればありがたいです。

コントローラーの @InitBinder スニペットは次のとおりです。

@InitBinder("formBacking")
public void initBinder(WebDataBinder binder){
    binder.registerCustomEditor(Set.class, "field", new SetEditor(listService, Set.class));
    logger.info("FormBacking Binder initialization");
}

これが私のPropertyEditorです:

public class SetEditor extends PropertyEditorSupport {
   protected static Logger logger = Logger.getLogger("PropertyEditor");

   private ListService listService;

   public SetEditor(ListService listService, Class clazz) {
    super(clazz);
    this.listService = listService;
   }

   @Override
   public String getAsText() {
    Stack<String> returnString = new Stack<String>();
    Set<Type> types = new HashSet<Type>();
    try {
        types = (Set<Type>)this.getValue();
        for (Type type:types) {
            returnString.push(type.getTypeId().toString());
        }
    } catch (NullPointerException e) {
        logger.info("getAsText is \"\"");
        return "";
    } catch (Exception e) {
        logger.info("getAsText Other Exception: " + e.getMessage());
        return "";
    }
    return "[" + StringUtils.collectionToDelimitedString(returnString,",") + "]";  // a very useful Spring Util
   }

   @Override
   public void setAsText(String text) throws IllegalArgumentException {
    Type type = new Type();
    Set<Type> result = new HashSet<Type>();
    try {
        String[] typeArray = text.split("[,]");  //this may not be correct, but I can't get here to debug it!!
        for(String type:typeArray) {
            if(!type.isEmpty()) {
                type = listService.getType(Long.valueOf(text));
                result.add(type);
            }
        }
    }catch(NullPointerException e) {
            logger.info("SetAsText is \"\" ");
        setValue(null);
    }
    catch(Exception e) {
        logger.info("setAsText Other Exception: " + e.getMessage());
    }
    setValue(result);
   }

}

Type クラスのスニペットは次のとおりです。

@Entity(name="Type")

@Table(name="type")
public class Type {

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "playListImages",
    joinColumns={@JoinColumn(name="superTypeId")},
    inverseJoinColumns={@JoinColumn(name="typeId")})
private Set<Type> types = new HashSet<Type>();

getters and setters...
4

1 に答える 1