我正在使用 JSF 和 EJB 3.1 开发一个 Web 应用程序,我想从 selectOneRadio 中检索一个值:
<p:selectOneRadio id="noteItem" value="#{entretienController.val1}">
<f:selectItem itemLabel="0" itemValue="0"/>
itemLabel="1" itemValue="1"/>
<f:selectItem itemLabel="2" itemValue="2"/>
<f:selectItem itemLabel="3" itemValue="3"/>
<f:selectItem itemLabel="4" itemValue="4"/>
<p:ajax process="@this" update="noteItem"/>
</p:selectOneRadio>
<p:commandButton process="entretienAnnuelDAPanel" action="#{noteEntretienController.testPersist()}"
/>
testPersist 方法:
public void testPersist() {
System.out.println("entrée dans la méthode testPersist");
try {
getFacade().saveListeNoteEntretien();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally !!!!!");
}
}
saveListeNoteEntretien 方法:
public void saveListeNoteEntretien() {
List<NoteEntretien> listNoteEntretien = new ArrayList<>();
try {
Collaborateur collaborateur = collaborateurFacade.find(1);
List<Competence> competences = null;
Competence competence = new Competence();
competences = competenceFacade.findAll();
Integer maxIdEntretien = (Integer) em.createQuery("SELECT MAX(e.idEntretien) from Entretien
e").getSingleResult();
Entretien entretien = new Entretien(maxIdEntretien + 1);
entretien.setDateEntretien(new Date());
entretien.setDiagnosticEntretien(entretienController.getDiagItem());
entretien.setObservationsEntretien(entretienController.getObsItem());
entretien.setIdCollaborateur(collaborateurController.getSelected());
em.persist(entretien);
for (int i = 0; i < 24; i++) {
Integer maxIdNoteEntretien = (Integer) em.createQuery("SELECT MAX(n.idNoteEntretien) from
NoteEntretien n").getSingleResult();
NoteEntretien noteEntretien = new NoteEntretien(maxIdNoteEntretien + 1);
noteEntretien.setIdCollaborateur(collaborateurController.getSelected());
noteEntretien.setIdCompetence(competences.get(i));
noteEntretien.setIdEntretien(entretien);
try {
System.out.println(entretienController.getVal1());
noteEntretien.setValNoteEntretien((float)entretienController.getVal1());
} catch (Exception e) {
e.printStackTrace();
}
em.persist(noteEntretien);
listNoteEntretien.add(noteEntretien);
}
} catch (EJBException e) {
@SuppressWarnings("ThrowableResultIgnored")
Exception cause = e.getCausedByException();
if (cause instanceof ConstraintViolationException) {
@SuppressWarnings("ThrowableResultIgnored")
ConstraintViolationException cve = (ConstraintViolationException)
e.getCausedByException();
for (Iterator<ConstraintViolation<?>> it = cve.getConstraintViolations().iterator();
it.hasNext();) {
ConstraintViolation<? extends Object> v = it.next();
System.err.println(v);
System.err.println("==>>" + v.getMessage());
}
}
System.err.println("ejb exception ! ! ! ! !");
} finally {
System.out.println("persistence OK !!!!!!!");
}
}
即使我选择 1、2、3 或 4,检索到的值也始终设置为 0。
我尝试了一个简单的 inputText 并将其解析为浮动在定义的方法上,然后可以获得正确的值:
<h3 style="width: 150px">Note</h3>
<p:inputText id="noteItem" value="#{entretienController.val1}">
<p:ajax update="noteItem"/>
</p:inputText>
更新 :
我还尝试了一个微调器,它工作得很好。问题只是 selectOneRadio
<p:outputLabel
value="#
{bundle.Personnel_Aptitudes_Communication_Ecrite}"
style="font-weight:bold"/>
<p:spinner id="noteItem" value="#
{entretienController.val1}">
<p:ajax update="noteItem"></p:ajax>
</p:spinner>
有没有人有可能帮助我呢?
谢谢 !