Pergunta

Eu estou usando Web Flow 2.0.7 com Spring MVC e Hibernate.

O meu problema é sobre conversores personalizados para os meus tipos personalizados e conexão com o banco de dentro do meu conversor.

Vamos dizer que eu tenho um tipo Person e Person tem um campo do meu tipo personalizado Título , e todos os Títulos já estão no meu banco de dados. Agora eu tenho um formulário HTML, em que um usuário pode preencher um Person instância, incluindo a seleção do Título em um select drop-down box.

Na definição fluxo eu recebo todos os Títulos do banco de dados e eles são mostrados na caixa suspensa usando um conversor personalizado, convertendo Título e Cadeia e mais tarde de volta para Título .

A minha pergunta é sobre o processo de conversão de volta de string (que é o ID do banco de dados, o que eu defini como o valor no elemento) para o correto Título objeto de meu banco de dados. Basicamente:? Como fazê-lo

Até agora, eu era incapaz de obter uma titleManager injetado em meu conversor para ter acesso ao banco de dados. Este cenário foi comentado no Spring Web Flow Fórum . Outra solução poderia ser a de armazenar em cache os Títulos antes de renderizar a vista e de alguma forma obter o in-memory Título após o formulário foi publicado.

Eu realmente aprecio isso, se alguém poderia me esclarecer, como lidar com este tipo de ligação de dados. Eu era incapaz de fazê-lo funcionar tão longe e, portanto, eu recebo o uso mínimo fora das webflows de outra forma impressionante.

Eu já postou uma discussão sobre o Fluxo Board Web, mas ainda faltando um best-pratice, que eu sou incapaz de encontrar por mim mesmo.

Muito obrigado!

Wolfram

Foi útil?

Solução

Eu uso para fazer isso. Basicamente eu carregar a lista de títulos e colocá-lo no meu modelo de formulário. No modelo de formulário Eu também tenho uma variável currentTitleId ou selectedTitleId para armazenar o valor do item selecionado. Este nome de campo está situado no "caminho" do combobox primavera eo TitleList é definido nos "itens". Em seguida, o valor que você deseja vincular está situado no "ItemValue" e o texto a ser mostrado para esse valor em "itemLabel". É isso.

No meu modelo de formulário:

private int currentTitleId;
public long getCurrentTitleId() { return this.currentTitleId; }
public void setCurrentTitleId(long currentTitleId) { this.currentTitleId = currentTitleId; }

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

Na minha jsp:

<form:label path="currentTitleId">Title</form:label>
<form:select path="currentTitleId" items="${formModel.titleList}" itemLabel="titleDescription" itemValue="titleId" />

Eu assumo que sua classe título será algo como isto:

class Title {
    public long getTitleId() { return this.titleId; }
    public long getTitleDescription() { return this.titleDescription; }
}

Você também pode personalizar você combobox um pouco mais parecido com isto:

    <form:select path="currentPhoneNumberId">
    <form:option value="">-</form:option>
    <c:forEach items="${formModel.phoneList}" var="phone">
        <form:option value="${phone.phoneNumberId}">${phone.phoneNumberId} - ${phone.description}</form:option>
    </c:forEach>
</form:select>

Outras dicas

Eu não estou tão certo sobre Spring Web Flow, mas com o Spring MVC normal, é suficiente para registrar um novo PropertyEditor e, em seguida, essa coisa funciona automaticamente

http : //static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion-customeditor-registration

http: // estática .springframework.org / primavera / docs / 2.5.x / reference / mvc.html # MVC-ann-webdatabinder

Assim, gostaria de criar um novo PropertyEditor que recebe um serviço ou dao que seria responsável por obter os dados do banco de dados, e dentro do PropertyEditor você converter o ID para o seu tipo de chave e obter o valor a partir do banco de dados e de retorno isto. Eu só não tenho um exemplo bem comigo, mas espero que você começa a essência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top