Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/twitter-bootstrap/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twitter bootstrap JSF2.2H:commandButton在引导模式内不工作_Twitter Bootstrap_Jsf 2_Cdi_Jsf 2.2 - Fatal编程技术网

Twitter bootstrap JSF2.2H:commandButton在引导模式内不工作

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

我试图使用纯JSF2.2和CDI从引导模式更新h:dataTable中的值

以下是数据表:

<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>

.... 情态动词
根据我在模态中的描述,命令按钮应与