我面臨selectOneMenu的一個問題。我需要在下拉菜單中顯示項目列表,這是必填字段。如何使用默認選擇選項顯示h:selectOneMenu所需的消息?
在該下拉菜單中,第一個值是「選擇」。如果用戶沒有選擇任何問題,那麼我需要顯示一條錯誤消息,如「選擇任何問題」。
任何人都可以給我解決方案嗎?
我面臨selectOneMenu的一個問題。我需要在下拉菜單中顯示項目列表,這是必填字段。如何使用默認選擇選項顯示h:selectOneMenu所需的消息?
在該下拉菜單中,第一個值是「選擇」。如果用戶沒有選擇任何問題,那麼我需要顯示一條錯誤消息,如「選擇任何問題」。
任何人都可以給我解決方案嗎?
只需將第一項的項目值設置爲null
。你不應該用標籤的值來設置它。
例如
<h:selectOneMenu value="#{bean.question}" required="true" requiredMessage="Please select a question">
<f:selectItem itemValue="#{null}" itemLabel="Select" />
<f:selectItems value="#{bean.questions}" />
</h:selectOneMenu>
您也可以創建一個驗證器。
1)
<h:selectOneMenu id="giftValue" value="#{yourController.giftDO.giftValue}">
<f:selectItems value="#{yourController.giftDO.giftValueMap}" />
<f:validator validatorId="selectOneMenuValidator"/>
</h:selectOneMenu>
<h:message for="giftValue" errorStyle="color:red"/>
//where giftValue enum willcontail the word "Select"
2)創建SelectOneMenuValidator.java
public class SelectOneMenuValidator implements Validator {
/* (non-Javadoc)
* @see javax.faces.validator.Validator#validate(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
*/
public void validate(FacesContext context, UIComponent arg1, Object value)
throws ValidatorException {
String giftValue = (String)value;
if(giftValue != null && giftValue.toUpperCase().equals("SELECT")){
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Please Select a question!");
message.setDetail("Please Select a question!");
context.addMessage("Please Select a question!", message);
throw new ValidatorException(message);
}
}
}
3)驗證添加到在faces-config.xml
<validator>
<validator-id>selectOneMenuValidator</validator-id>
<validator-class>net.roseindia.validations.SelectOneMenuValidator</validator-class>
</validator>
僅僅是一個警告詞:Roseindia.net是全球最差的**資源,用於學習Java EE。請將該網站添加到您的黑名單。在這種特殊情況下,Roseindia.net的文章作者顯然不知道'required/requiredMessage`屬性是可以/應該如何使用的。另外,那個`context.addMessage()`部分在這個上下文中是純粹的廢話。這對JSF初學者來說非常具有誤導性,他們後來不恰當地抱怨JSF「非常混亂,困難和糟糕」,而只是那些「講課」的資源是不好的。請得到一本體面的書/資源/教程。 – BalusC 2014-09-28 06:18:06
我認爲 with bean.question =「Please ....」更好,因爲在邏輯服務器中不會隨視圖更改而改變。用if(!question.equals(「請...」)){do ...} –
2016-09-07 07:13:27