我想在h:inputText字段旁边显示消息,但它们不会在那里显示,而是显示在全局消息的字段中。
消息字段通过绑定标记绑定到inputText,但是当我在我的支持bean中使用getClientId()调用它们时,返回的id似乎是错误的。我认为这会导致消息显示在全局字段中。
可以在下面的链接图片中查看。
我的页面:
<a4j:outputPanel id="editPanel">
<a4j:queue requestDelay="300" ignoreDupResponses="true" />
<table>
<tr>
<td>Kostenstelle</td>
<td><h:inputText id="kst" inputType="text" placeholder=""
value="#{kostenstellenBean.kst}" label="Kostenstelle"
maxlength="5" binding="#{kostenstellenBean.kstInput}">
<a4j:ajax event="keyup" render="buttonPanel kstMessage" />
</h:inputText></td>
<td><h:message id="kstMessage" for="kst" /></td>
</tr>
<tr>
<td>Bezeichnung</td>
<td><h:inputText id="bezeichnung" inputType="text"
placeholder="" value="#{kostenstellenBean.bezeichnung}"
label="Bezeichnung" maxlength="20"
binding="#{kostenstellenBean.bezeichnungInput}">
<a4j:ajax event="keyup" render="buttonPanel bezeichnungMessage" />
</h:inputText></td>
<td><h:message id="bezeichnungMessage" for="bezeichnung" /></td>
</tr>
<tr>
<td>BA</td>
<td><h:inputText id="ba" inputType="text" placeholder=""
value="#{kostenstellenBean.ba}" label="BA" maxlength="3"
binding="#{kostenstellenBean.baInput}">
<a4j:ajax event="keyup" render="buttonPanel baMessage" />
</h:inputText></td>
<td><h:message id="baMessage" for="ba" /></td>
</tr>
<tr>
<td>BK</td>
<td><h:inputText id="bk" inputType="text" placeholder=""
value="#{kostenstellenBean.bk}" label="BK" maxlength="3"
binding="#{kostenstellenBean.bkInput}">
<a4j:ajax event="keyup" render="buttonPanel bkMessage" />
</h:inputText></td>
<td><h:message id="bkMessage" for="bk" /></td>
</tr>
<tr>
<td>BL</td>
<td><h:inputText id="bl" inputType="text" placeholder=""
value="#{kostenstellenBean.bl}" label="BL" maxlength="3"
binding="#{kostenstellenBean.blInput}">
<a4j:ajax event="keyup" render="buttonPanel blMessage" />
</h:inputText></td>
<td><h:message id="blMessage" for="bl" /></td>
</tr>
<!--
<h:inputHidden id="index" inputType="text" placeholder=""
value="#{kostenstellenBean.index}" label="Index" />
<h:inputHidden id="row" inputType="boolean" placeholder=""
value="#{kostenstellenBean.rowSelected}" label="Index" />
-->
</table>
<rich:panel id="buttonPanel">
<bwf:commandButton id="save" value="Speichern"
disabled="#{!kostenstellenBean.validateData()}">
<rich:componentControl target="confirmation_save" operation="show" />
</bwf:commandButton>
<bwf:commandButton id="edit" value="Ändern"
disabled="#{!kostenstellenBean.rowSelected or !kostenstellenBean.validData}">
<rich:componentControl target="confirmation_edit" operation="show" />
</bwf:commandButton>
<bwf:commandButton id="delete" value="Löschen"
disabled="#{!kostenstellenBean.rowSelected}">
<rich:componentControl target="confirmation_delete"
operation="show" />
</bwf:commandButton>
<h:messages />
</rich:panel>
</a4j:outputPanel>
我在支持bean中的验证方法:
public boolean validateData() {
boolean valid = true;
String message;
FacesContext context = FacesContext.getCurrentInstance();
if (kst == 0) {
message = "Kostenstelle ungültig! ";
context.addMessage(kstInput.getClientId(), new FacesMessage(message
+ kstInput.getClientId()));
valid = false;
}
if (bezeichnung == null || bezeichnung.isEmpty()) {
message = "Bezeichnung muss vorhanden sein!";
context.addMessage(bezeichnungInput.getClientId(),
new FacesMessage(message));
valid = false;
}
if (ba + bk + bl != 100) {
message = "Die Summe aller Verteilungsschlüssel muss 100 ergeben! ";
context.addMessage(baInput.getClientId(), new FacesMessage(message));
valid = false;
}
validData = valid;
return valid;
}
所有这些输入字段根据输入更改命令按钮的可用性。如果无效,则应禁用命令按钮。这项工作到目前为止。
问题是在支持bean中调用的消息不会显示在我通过绑定和getClientId()
寻址的输入字段旁边,而是显示在命令按钮下的全局消息字段中(此字段应该是正确显示所有消息后删除。)。
希望有人可以指出我犯的错误或告诉我逻辑上的缺陷。
答案 0 :(得分:0)
我通过尝试不同的方法来解决问题。
现在我正在使用前两个输入字段的必需属性,该字段不应为空,导致错误消息显示在指定的消息字段中。
对于其他三个输入字段,辅助bean中的方法检查它们的总和是否等于100,如果不是只显示全局消息。