Salve Pessoal,
Estou com um problema em uma aplicação Web/Struts. Eu preciso em uma página apresentar alguns checkboxes que representam o fato de uma coluna em uma tabela estar definida para true ou false.
Estou usando o tag <html:multibox> para isso. Está “quase tudo funcionando”… Se eu seleciono o checkbox na página eu consigo salvar este estado no bd. O problema é que não consigo de modo algum apresentar o checkbox checked se a coluna na tabela estiver definida como true. Será que alguem já teve este problema? Já garimpei na net mas não acehi nada que resolvesse meu problema… Se alguem puder ajudar eu agradeceria. Abaixo mando o codigo da página jsp, das actions, dos forms e a tabela.
Estou usando o hibenate e o struts 1.2.8.
Tabela Questionarios:
CREATE TABLE questionarios
(
idquestionario int4 NOT NULL DEFAULT nextval('questionarios_idquestionario_seq'::regclass), -- Identificador do question•rio.
idcursos int4 NOT NULL, -- Identificador do curso ao qual o question•rio se refere.
semestre int2 NOT NULL, -- Semestre a que se refere o question•rio.
ano int4 NOT NULL, -- Ano a que se refere o question•rio.
disponibilidade bool NOT NULL, -- Indica se o question•rio est• disponŸvel para ser respondido ou n—o.
CONSTRAINT questionarios_pk PRIMARY KEY (idquestionario),
CONSTRAINT fk_questidcursos FOREIGN KEY (idcursos)
REFERENCES cursos (idcursos) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE questionarios OWNER TO postgres;
Parte da página JSP onde o tag é usado:
<c:forEach var="quest" items="${questionarios}" varStatus="stat">
<tr class="${(stat.index % 2) == 0 ? "evenRow" : "oddRow"}">
<td align="center" width="100">
<html:multibox property="selectedItems">
${quest.idquestionario}
</html:multibox>
</td>
<td align="center" width="100"><c:out value="${quest.semestre}" /></td>
<td align="center" width="70"><c:out value="${quest.ano}" /></td>
</tr>
</c:forEach>
Action que é chamada antes do processamento ser encaminhado a página JSP que usa o tag (parte do código)
// Constrói um objeto de serviço questionario
QuestionariosService serviceQ = new QuestionariosService();
// Constrói um vetor (com informações de questionários) para o formulário
Collection quests = (Vector) serviceQ.makeQuestionariosList(curso);
// Constrói a lista com os questionários que estão disponibilizados
String selectedItems [] = serviceQ.makeSelectedItems();
for (int i = 0; i < selectedItems.length; i++) // apresenta as tuplas com disponibilidade = true
System.out.println("Id Questionário disponível = " + selectedItems[i]);
QuestForm questForm = new QuestForm();
questForm.setSelectedItems(selectedItems);
request.setAttribute("questionarios", quests);
// Encaminha o processamento
return mapping.findForward(FORWARD_disponibilizaQ);
Método da Action que é chamado para tratamento da página JSP. Aqui eu consigo recuperar o estado dos checkboxes e salvá-los no BD.
public ActionForward finalize(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
// Apresenta os parâmetros que chegaram ao método
java.util.Enumeration nomes = request.getParameterNames();
while(nomes.hasMoreElements())
System.out.println("nomeP = " + nomes.nextElement());
// Salva mensagem no log
logger.debug("Entrou no finalize do QuestionarioAction");
// Recupera o formulário
QuestForm questForm = (QuestForm) form;
// Cria uma sessão e recupera o curso da sessão
HttpSession session = request.getSession();
Cursos curso = (Cursos) session.getAttribute("curso");
System.out.println("Curso: " + curso.getNome());
// Recupera os id dos questionários que se pretende disponibilizar
String disponibiliza [] = questForm.getSelectedItems();
// Cria o DTO (Pojo) para manipulação dos dados
Questionarios quest;
// Constrói um objeto de serviço questionario
QuestionariosService serviceQ = new QuestionariosService();
// Altera no BD o estado de cada um dos questionarios selecionados
if (disponibiliza != null) {
for (int i = 0; i < disponibiliza.length; i++) {
System.out.println("Disponibiliza id = " + disponibiliza[i]);
quest = serviceQ.getQuestionario(disponibiliza[i]);
quest.setDisponibilidade(!quest.getDisponibilidade());
serviceQ.updateQuestionario(quest);
}
}
return mapping.findForward(GLOBAL_FORWARD_start);
}
O ActionForm:
public class QuestForm extends org.apache.struts.action.ActionForm {
/**
*
*/
private static final long serialVersionUID = 1L;
private String idquestionario;
private String ano;
private String semestre;
private Cursos idcursos;
private boolean disponibilidade;
private String selectedItems [];
// Métodos get e set não apresentados