Twitter bootstrap JSF2.2H:commandButton在引导模式内不工作
我试图使用纯JSF2.2和CDI从引导模式更新h:dataTable中的值 以下是数据表:Twitter bootstrap JSF2.2H:commandButton在引导模式内不工作,twitter-bootstrap,jsf-2,cdi,jsf-2.2,Twitter Bootstrap,Jsf 2,Cdi,Jsf 2.2,我试图使用纯JSF2.2和CDI从引导模式更新h:dataTable中的值 以下是数据表: <h:dataTable id="tabNotas" value="#{notaBean.notas}" var="nota" styleClass="table table-hover"> <h:column> <f:fac
<h:dataTable id="tabNotas" value="#{notaBean.notas}" var="nota"
styleClass="table table-hover">
<h:column>
<f:facet name="header">
<h:outputText value="ALUNO" />
</f:facet>
<h:outputText value="#{nota.aluno.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Disciplina" />
</f:facet>
<h:outputText value="#{nota.disciplina.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="TIPO" />
</f:facet>
<h:outputText value="#{nota.tipo.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="NOTA" />
</f:facet>
<h:outputText value="#{nota.valor}" />
</h:column>
<h:column>
<h:commandLink class="btn btn-primary" value="Alterar">
<f:passThroughAttribute name="data-toggle" value="modal" />
<f:passThroughAttribute name="data-target" value="#myModal" />
<f:ajax listener="#{notaBean.editarNota(nota)}"
render="formModalNotas" />
</h:commandLink>
</h:column>
</h:dataTable>
以下是模态:
<div id="myModal" class="modal fade">
<h:form id="formModalNotas" role="form">
<div class="modal-dialog">
<div class="modal-content">
<h:messages showSummary="true" errorClass="alert alert-danger"
infoClass="alert alert-success" for="formModalNotas" />
<input type="hidden" name="id" value="#{notaBean.nota.aluno.id}" />
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true"></button>
<h4 class="modal-title">Alterar</h4>
</div>
<div class="modal-body">
<div class="form-group ">
<label for="tipoNota">Tipo da Nota:</label>
<h:inputText value="#{notaBean.nota.tipo.descricao}"
styleClass="form-control" id="tipoNota" disabled="true" />
</div>
<div class="form-group ">
<label for="nota">Nota:</label>
<h:inputText value="#{notaBean.nota.valor}"
styleClass="form-control" id="nota" />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">Close</button>
<h:commandButton value="Salvar" action="#{notaBean.alterar}"
styleClass="btn btn-primary">
</h:commandButton>
</div>
</div>
</div>
</h:form>
</div>
奥特拉尔
蒂波达诺塔:
注:
接近
模态工作得很好,问题在于从未调用的action=“#{notaBean.alterar}”
我做错什么了吗?以前有人这样做过吗
编辑
我正在使用Tomcat8。这是NotaBean的代码,我已经改成了viewscope,但仍然是空的=/
@Named(value = "notaBean")
@ViewScoped
public class NotaBean implements Serializable {
private static final long serialVersionUID = 5134990385063835570L;
@Inject
private NotaDao notaDao;
@Inject
private Dao<Curso> daoCurso;
@Inject
private Dao<Disciplina> disciplinaDao;
@Inject
private Nota nota;
private Aluno aluno;
private List<Disciplina> disciplinas;
@PostConstruct
public void init() {
nota.setDisciplina(new Disciplina());
}
public Nota getNota() {
return nota;
}
public void setNota(Nota nota) {
this.nota = nota;
}
public Aluno getAluno() {
return aluno;
}
public void setAluno(Aluno aluno) {
this.aluno = aluno;
}
public List<Disciplina> getDisciplinas() {
if (aluno == null || aluno.getCurso().getId() == null) {
disciplinas = null;
} else {
Curso cursoSelecionado = daoCurso.buscaPorId(aluno.getCurso()
.getId());
disciplinas = cursoSelecionado.getDisciplinas();
}
return disciplinas;
}
public void setDisciplinas(List<Disciplina> disciplinas) {
this.disciplinas = disciplinas;
}
@Transacional
public void cadastrar() {
try {
nota.setAluno(aluno);
nota.setDisciplina(disciplinaDao.buscaPorId(nota.getDisciplina()
.getId()));
validar(nota);
notaDao.adiciona(nota);
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage(
"Nota cadastrada com sucesso!");
facesMessage.setSeverity(FacesMessage.SEVERITY_INFO);
facesContext.addMessage(null, facesMessage);
} catch (Exception e) {
e.printStackTrace();
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage(e.getMessage());
facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
facesContext.addMessage(null, facesMessage);
}
}
private void validar(Nota nota) throws Exception {
if (nota.getValor() == null) {
throw new Exception("Valor da nota � obrigat�rio");
}
if (nota.getValor() < 0 || nota.getValor() > 10) {
throw new Exception("Valor da nota deve ser entre 0 e 10");
}
for (Nota notaAluno : aluno.getNotas()) {
if (notaAluno.getDisciplina().equals(nota.getDisciplina())) {
if (notaAluno.getTipo().equals(nota.getTipo())) {
throw new Exception("Nota de " + nota.getTipo()
+ " para a disciplina " + notaAluno.getDisciplina()
+ " j� cadastrada");
}
}
}
}
public List<TipoNota> getTiposNota() {
return Arrays.asList(TipoNota.values());
}
public List<Nota> getNotas() {
return notaDao.buscarNotasAluno(aluno.getId());
}
public void editarNota(Nota nota) {
this.nota = nota;
}
@Transacional
public void alterar() {
try {
validar(nota);
notaDao.atualiza(nota);
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage(
"Nota alterada com sucesso!");
facesMessage.setSeverity(FacesMessage.SEVERITY_INFO);
facesContext.addMessage(null, facesMessage);
} catch (Exception e) {
e.printStackTrace();
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage(e.getMessage());
facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
facesContext.addMessage(null, facesMessage);
}
}
}
@Named(value=“notaBean”)
@视域
公共类NotaBean实现了可序列化{
私有静态最终长serialVersionUID=51349903856383570L;
@注入
私人的NotaDao NotaDao;
@注入
私人刀刀刀;
@注入
私道;
@注入
私人公证人;
私人阿鲁诺;
私人名单纪律部队;
@施工后
公共void init(){
nota.setstricta(新规程());
}
公证人{
返回nota;
}
公共无效setNota(Nota Nota){
this.nota=nota;
}
公共Aluno getAluno(){
返回aluno;
}
公共无效setAluno(Aluno Aluno){
this.aluno=aluno;
}
公共列表{
if(aluno==null | | aluno.getCurso().getId()==null){
纪律=零;
}否则{
Curso cursorselecionado=daoCurso.buscaPorId(aluno.getCurso())
.getId());
Structias=cursonelecionado.getStructias();
}
回归纪律;
}
公共无效纪律处分(纪律处分清单){
this.stracitas=stracitas;
}
@经阴道
公共无效地籍(){
试一试{
编号:setAluno(aluno);
nota.setstricta(strictadao.buscaPorId)(nota.getstricta()
.getId());
瓦利达尔(nota);
notaDao.adiciona(nota);
FacesContext FacesContext=FacesContext.getCurrentInstance();
FacesMessage FacesMessage=新的FacesMessage(
“不是卡达斯特拉达成功!”;
facesMessage.setSeverity(facesMessage.SEVERITY_信息);
addMessage(null,facesMessage);
}捕获(例外e){
e、 printStackTrace();
FacesContext FacesContext=FacesContext.getCurrentInstance();
FacesMessage FacesMessage=新的FacesMessage(e.getMessage());
facesMessage.setSeverity(facesMessage.SEVERITY_错误);
addMessage(null,facesMessage);
}
}
私有void validar(Nota Nota)引发异常{
if(nota.getValor()==null){
抛出新异常(“Valor da nota� 奥布里加特�力拓);
}
if(nota.getValor()<0 | | nota.getValor()>10){
抛出新异常(“Valor da nota deve ser entre 0 e 10”);
}
for(Nota notaluno:aluno.getNotas()){
if(notaluno.getStructica().equals(nota.getStructica())){
if(notaluno.getTipo().equals(nota.getTipo())){
抛出新异常(“Nota de”+Nota.getTipo()
+“第a条纪律规定”+notaluno.getstricta()
+“j� 地籍管理局);
}
}
}
}
公共列表gettipsonta(){
返回Arrays.asList(TipoNota.values());
}
公共列表getNotas(){
返回notaDao.buscarNotasAluno(aluno.getId());
}
公共无效editarNota(Nota Nota){
this.nota=nota;
}
@经阴道
公共无效替代品(){
试一试{
瓦利达尔(nota);
notaDao.atualiza(nota);
FacesContext FacesContext=FacesContext.getCurrentInstance();
FacesMessage FacesMessage=新的FacesMessage(
“不成功!”;
facesMessage.setSeverity(facesMessage.SEVERITY_信息);
addMessage(null,facesMessage);
}捕获(例外e){
e、 printStackTrace();
FacesContext FacesContext=FacesContext.getCurrentInstance();
FacesMessage FacesMessage=新的FacesMessage(e.getMessage());
facesMessage.setSeverity(facesMessage.SEVERITY_错误);
addMessage(null,facesMessage);
}
}
}
如果您将
放在模态的外侧,问题将得到解决,如:
<h:form>
.... modal.....
</h:form>
.... 情态动词
根据我在模态中的描述,命令按钮应与