我在一個非常標準的Java Web應用程序(jsf-2)中使用PrimeFaces,並且在將ap:autoComplete組件移入時顯示所需的消息時出現問題它自己的自定義組件..primefaces requiredMessage當p:autoComplete移動到自定義組件中時丟失了
第一,號碼:自動完成時,它的頁面本身 - 這是工作的罰款(簡體):
<h:panelGrid id="newRoleAdminGrid" >
<p:autoComplete id="newRoleAdminPerson"
style="position: relative; padding-right:5px"
value="#{roleList.newRoleAdminPerson}"
var="personVar"
itemValue="#{personVar}"
itemLabel="#{personVar.fullFamiliarName}"
forceSelection="true"
completeMethod="#{personAutoComplete.byGeneralCriteria}"
converter="PersonConverter"
minQueryLength="3"
maxResults="50"
scrollHeight="400"
size="50"
required="true"
requiredMessage="admin name is requiredd"
title="enter users first name, last name or login" >
</p:autoComplete>
<h:message for="newRoleAdminPerson" class="redError"/>
<p:commandButton value="add" ajax="true"
update="roleAdminTable,newRoleAdminGrid"
id="addRoleAdminBtn"
actionListener="#{roleList.newRoleAdmin}"
style="margin:5px;"
icon="ui-icon-plus"/>
</h:panelGrid>
看到H:以上消息?這是完美的工作,並顯示當值是空白,或它不通過PersonConverter ...
但是,我有這個相同的組件,所以我創建了一個自定義組件。
這裏的組件:
<cc:interface>
<cc:attribute name="id" type="String" required="true" />
<cc:attribute name="person" type="com.foo.bar.model.Person" required="true" />
<cc:attribute name="size" type="int" required="false" default="50" />
<cc:attribute name="required" type="boolean" required="false" default="false" />
<cc:attribute name="requiredMessage" type="String" required="false" default="required" />
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<p:autoComplete id="#{cc.attrs.id}"
style="position: relative; padding-right:5px"
value="#{cc.attrs.person}"
var="personVar"
itemValue="#{personVar}"
itemLabel="#{personVar.fullFamiliarName}"
forceSelection="true"
completeMethod="#{personAutoComplete.byGeneralCriteria}"
converter="PersonConverter"
minQueryLength="3"
maxResults="50"
scrollHeight="400"
size="#{cc.attrs.size}"
required="#{cc.attrs.required}"
requiredMessage="#{cc.attrs.requiredMessage}"
title="enter users first name, last name or login" >
</p:autoComplete>
<h:message for="#{cc.attrs.id}" class="redError"/>
</cc:implementation>
這裏就是代碼看起來像現在(使用自定義組件):
<h:panelGrid id="newRoleAdminGrid" >
<my:personLookup id="newRoleAdminPerson"
person="#{roleList.newRoleAdminPerson}"
required="true" requiredMessage="#{propUtil.appShortName} Admin Name is required"/>
<h:message for="newRoleAdminPerson" class="redError"/>
<p:commandButton value="add" ajax="true"
update="roleAdminTable,newRoleAdminGrid"
id="addRoleAdminBtn"
actionListener="#{roleList.newRoleAdmin}"
style="margin:5px;"
icon="ui-icon-plus"/>
</h:panelGrid>
當我這樣運行,該組件的工作 - 如果用戶將其留空,或者它通過驗證時,primefaces邊框變爲紅色,但h:消息從不顯示實際錯誤(requiredMessage或PersonConverter中設置的內容)
我已經嘗試了很多不同的變體,比如只在實現中設置id,或者僅在my:personLookup中設置id,或者兩者兼有。
有人跑過這個嗎?我在做什麼或設置錯誤?謝謝你的時間!
您是否嘗試過使用'號碼:message'呢? – elias 2013-03-06 00:31:05
@elias我確定有..另外我似乎無法得到** p:messages **或** h:messages **中的任何一個。 – russellelbert 2013-03-06 02:11:47
爲什麼你在複合組件中有'h:message'並且在它之外?你想要哪個'message'?如果你想在複合內部使用'message',只需在''message'中將'id ='autocomplete''分配給'autocomplete'並將'for =「autocomplete''賦值。複合組件是命名容器,所以你不必擔心id的唯一性。 – partlov 2013-03-06 07:54:30