Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > instanceof в jsf. возможно ли?


Автор: Bandit 6.10.2009, 14:56
Доброго времени суток форумчанам.

Есть наивный вопрос... можно ли на странице jsf(jsp) каким-либо образом определять тип возвращаемого объекта? 

Например: у меня есть list с объектами одного родительского класса. я его итерирую.

Код

                                            <a4j:repeat id="rep" value="#{row.atomicValues}" var="aVal">
                                                    <h:outputText value="#{aVal.value}"/>
                                            </a4j:repeat>

есть ли возможность определить тип объекта aVal и повлиять на логику обработки?

Автор: ivanovpv 6.10.2009, 15:11
Конечно можно.  Все равно твой "aVal" - это некий атрибут, только надо понять какого он контекста (скорее всего страничного контекста)

Попробуй иньекцию типа:
Код

<%
Object obj=pageContext.findAttribute("aVal");
if(obj instanceof java.lang.String)
{
       //blah-blah
}
%>

Автор: Bandit 6.10.2009, 15:29
А кроме иньекции java кода какие-нибудь возможности имеются? А то MVC побоку пойдет smile

Автор: magicfly 6.10.2009, 15:33
про jsp:
ну как минимум можно сделать это в скриплет тегах. Вполне возможно что для этого можно написать кастом тегю

Upd:
тогда точно сustom tag

Автор: ivanovpv 6.10.2009, 15:49
Цитата(Bandit @  6.10.2009,  15:29 Найти цитируемый пост)
А то MVC побоку пойдет


Лет 10 назад я также заморачивался такими священными темами, а потом понял что все это от лукавого. Основные критериями которыми надо реально заморачиваться, это:
а) Щастье клиента
б) Расширяемость кода
в) Документация

MVC - в этом списке проходит как подпунктик пункта б) - причем его вклад в этот пунктик наверное не более 1/3

Так что смело инжектируй. А иначе изобретай себе новые кастом теги, которые проверяет типы (а оно надо?  smile )

Автор: Bandit 6.10.2009, 17:24
 smile 

Автор: Bandit 12.10.2009, 17:16
Решил последовать данному совету... 
Сразу вывалился:

java.lang.NullPointerException
        at jsp_servlet.__manual_record_details._jspService(__manual_record_details.java:371)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
        Truncated. see log file for complete stacktrace


Код


...............
                              <a4j:repeat id="repValRow" value="#{rowDataList.atomicValueList}" var="rowDataUtils">
                                        <f:verbatim>
                                            <td id="tdRecordVal" style="text-align:left;">
                                        </f:verbatim>
                                                <h:outputText value="#{rowDataUtils.valueAtomicObject}"/>
                                                <h:outputText value=", " rendered="#{rowDataList.multi}"/>


                                                <%
                                                
                                                Object objServCont = pageContext.getServletContext().getAttribute("rowDataUtils");
                                                Object obj1= pageContext.findAttribute("rowDataUtils");
                                                Object obj2= session.getAttribute("rowDataUtils");
                                                Object obj3= application.getAttribute("rowDataUtils");
                                                Object obj4= request.getAttribute("rowDataUtils");
  
                                                if(objServCont == null){
                                                    System.out.println("objServCont ########################");
                                                }

                                                if(obj == null){
                                                    System.out.println("obj1########################");
                                                }
                                                if(obj2 == null){
                                                    System.out.println("obj2#######################");
                                                }
                                                if(obj3 == null){
                                                    System.out.println("obj3########################");
                                                }
                                                if(obj4 == null){
                                                    System.out.println("obj4#######################");
                                                }



                                                RowDataUtils rowDataUtils = (RowDataUtils)obj;
                                                if(rowDataUtils.getAtomicValue() instanceof LinkRow){
                                                    LinkRow linkRow = (LinkRow) rowDataUtils.getAtomicValue();
                                                    pageContext.setAttribute("linkRow",linkRow);
                                                    %>
                                                    <h:commandLink action="#{manualManager.selectRecord}" immediate="true">
                                                        <f:param name="idRecordParam" value="#{linkRow.rowId}"/>
                                                        <h:outputText value="#{linkRow.name}"/>
                                                    </h:commandLink>
                                                    <%
                                                }
                                                %>


                                        <f:verbatim>
                                            </td>
                                        </f:verbatim>
                                    </a4j:repeat>
................


проблема заключается в том, что NULL получается всюду... что я делаю не так? как мне закинуть rowDataUtils в pageContext? 
страшно замучался... дайте совет... в pageContext может содержать в себе любой объет возвращаемый методом rowDataUtils.getAtomicValue()  и в зависимости от него мне надо выводить: текст, ссылку, номер... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)