gpt4 book ai didi

validation - 的禁用属性不评估请求参数

转载 作者:行者123 更新时间:2023-12-02 04:00:34 24 4
gpt4 key购买 nike

我想在按下按钮添加和按钮删除时禁用验证,所以我尝试了这个

<f:validateLength maximum="500" disabled="#{!empty param['mainForm:add_Button'] or !empty param['mainForm:delete_Button']}" />

按钮添加已被禁用,但是按钮删除没有。而且我不知道出什么问题了!
这是我的代码,你们能帮我检查一下吗?对不起,我的英语不好
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets" template="../main.xhtml">
<ui:define name="content">


<div id="question">

<div id="mainForm" class="form">

<span>ID:#<h:outputText value="#{editQuestion.questionData.question.id}" /></span>
<br />
<div>
<span><h:outputText value="#{i18n['admin.edit.questiontitle']}" />:</span>
<h:inputTextarea id ="title" rows="3" style="width: 100%" value="#{editQuestion.questionData.title}" required="#{!empty param['mainForm:Save_btn']}" label="Question Title">
<f:validateLength maximum="500" disabled="#{!empty param['mainForm:add_Button'] or !empty param['mainForm:delete_Button']}" />
</h:inputTextarea>
<h:message for="title" style="color: red"/>
</div>
<div>
<span><h:outputText value="#{i18n['admin.edit.questiontext']}" />:</span><br />
<h:inputTextarea rows="6" id="name" style="width: 100%" value="#{editQuestion.questionData.text}" required="#{!empty param['mainForm:Save_btn']}" label="Question Text">
<f:validateLength maximum="1000" disabled="#{!empty param['mainForm:add_Button'] }"/>
</h:inputTextarea>
<h:message for="name" style="color:red"/>
</div>

<div class="list">

<div class="title"><h:outputText value="#{i18n['admin.edit.answers']}" /></div>
<div class="btn_add">
<h:commandButton image="/resources/imgs/#{editQuestion.buttonAdd}" alt="add" id="add_Button"
title="#{i18n['img.add']}" action="#{editQuestion.addAnswer}"
disabled="#{!editQuestion.possibleToAdd}">
<f:param name="id" value="#{editQuestion.id}"/>
</h:commandButton>
</div>
<h:dataTable cellspacing="0" value="#{editQuestion.answersData}" var="answer">
<h:column>
<f:facet name="header">ID</f:facet>
<h:outputText value="#{answer.answer.id}" />
</h:column>

<h:column>
<f:facet name="header"><h:outputText value="#{i18n['admin.edit.rightanswer']}" /></f:facet>
<h:selectBooleanCheckbox value="#{answer.answer.isRight}"/>
</h:column>

<h:column>
<f:facet name="header"><h:outputText value="#{i18n['admin.edit.answers']}" /></f:facet>
<h:inputTextarea id="answer" rows="3" cols="40" value="#{answer.text}" required="#{!empty param['mainForm:Save_btn']}" label ="Answer">
<f:validateLength maximum="500" disabled="#{!empty param['mainForm:add_Button'] }"/>
</h:inputTextarea>
<div>
<h:message for="answer" style ="color:red"/>
</div>

</h:column>

<h:column>
<h:commandButton image="/resources/imgs/#{editQuestion.buttonDelete}"
action="#{editQuestion.deleteAnswer(answer)}" disabled="#{!editQuestion.possibleToDelete}"
alt="delete" id="delete_Button" title="#{i18n['img.delete']}">
<f:param name="id" value="#{editQuestion.id}"/>
</h:commandButton>
</h:column>
</h:dataTable>
</div>

<div class="btn_block" style="float: inherit" >
<center>
<h:commandButton value="#{i18n['btn.save']}" styleClass="button bg_green" id="Save_btn" action="#{editQuestion.saveAction}">
<f:param name="id" value="#{editQuestion.id}" />
</h:commandButton>

<h:commandButton value="#{i18n['btn.cancel']}" styleClass="button bg_red" action="#{editQuestion.calcelAction}">
<f:param name="id" value="#{editQuestion.id}" />
</h:commandButton>
</center>
</div>
</div>
</div>


</ui:define>

最佳答案

<f:validateLength>是标签处理程序,而不是UI组件。根据规范,所有标记处理程序属性都是在 View 构建时而不是 View 渲染时评估的。因此,属性将在同一 View 的整个生命周期中保持与首次构建 View 时相同的值。

基本上,您需要创建一个自定义验证器,该验证器检查validate()方法内的request参数,然后委派给标准LengthValidator类。

<f:validator validatorId="delegateLengthValidator" />
<f:attribute name="maximum" value="1000" />
<f:attribute name="buttonId" value="mainForm:add_Button" />


String buttonId = component.getAttributes().get("buttonId");

if (!context.getExternalContext().getRequestParameterMap().containsKey(buttonId)) {
LengthValidator validator = new LengthValidator();
validator.setMaximum(Integer.valueOf(component.getAttributes().get("maximum")));
validator.validate(context, component, value);
}

请注意, OmniFaces最近添加了一个新的 <o:validator>标记,该标记应完全解决此问题,如下所示:
<o:validator validatorId="javax.faces.Length" maximum="1000" disabled="#{!empty param['mainForm:add_Button']}" />

参见展示示例 here

关于validation - <f:validateLength>的禁用属性不评估请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10751260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com