簡體   English   中英

為什么SelectOneMenu會忽略轉換器?

[英]Why SelectOneMenu ignores the converter?

我有一個對象列表,一個selectOneMenu ,我想在其中顯示該對象列表。 我不想在該菜單中顯示toString()方法結果,而是創建了一個轉換器。

問題是在h:outputText元素轉換器被調用,我看到了預期的值。 但是當我將該轉換器附加到h:selectOneMenu時,仍會在呈現頁面時調用轉換器,但忽略結果並使用toString()結果。 我該如何解決?

一些示例代碼:

轉換器:

@FacesConverter(forClass=Priority.class)
public class PriorityConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        try {
            InitialContext ic = new InitialContext();
            PriorityEJB priorityEJB = (PriorityEJB) ic.lookup("java:global/TicketSentinel/TicketSentinel-ejb/PriorityEJB");
            return priorityEJB.getPriorityByOrd(Integer.valueOf(value.charAt(0)));
        } catch (NamingException ex) {
            Logger.getLogger(PriorityConverter.class.getName()).log(Level.SEVERE, null, ex);
            throw new ConverterException();
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        Priority p = (Priority) value;
        return p.getOrder() + " - " + p.getName();
    }

}

部分頁面:

<h:outputText value="Priority:" />
<h:selectOneMenu value="#{ticketController.ticket.priority}">
    <f:selectItems value="#{priorityController.priorityList}" />
</h:selectOneMenu>

控制器bean:

@Named(value = "priorityController")
@RequestScoped
public class PriorityController {
    @EJB
    private PriorityEJB priorityEJB;

    public List<Priority> getPriorityList() {
        return priorityEJB.getPriorities();
    }

}


更新:

我查看了頁面的來源,發現了這個:

 <td><select name="j_idt18:j_idt26" size="1"> <option value="1 - Fatal">1 - - Fatal</option> <option value="2 - Critical">2 - - Critical</option> <option value="3 - Very Important">3 - - Very Important</option> <option value="4 - Important">4 - - Important</option> <option value="5 - Minor">5 - - Minor</option> <option value="6 - Fix if time">6 - - Fix if time</option> <option value="7 - Insignificant">7 - - Insignificant</option> </select></td> 

所以引擎打印正確的值,但在錯誤的地方! 如何將value屬性中的文本放入<option>塊的主體?

轉換器僅用於轉換下拉列表的 (無論您看到的是什么<option value>不是轉換下拉列表的標簽 (無論您在<option></option>之間看到什么。)標簽是一個在下拉菜單中可見。

如果要將標簽更改為與值相同,則只需執行以下操作:

<f:selectItems value="#{priorityController.priorityList}" var="priority"
    itemValue="#{priority}" itemLabel="#{priority.order} - #{priority.name}" />

對於#{priority}的項值,仍將調用轉換器。 雖然我更喜歡使用一些自動生成的數據庫ID而不是標簽值,以便轉換更有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM