/*! \~english Returns the rendering data of the partial template given by \a templateName. \~japanese 部分テンプレート \a templateName に変数 \a vars を設定した描画データを返す */ QString TActionController::getRenderingData(const QString &templateName, const QVariantHash &vars) { T_TRACEFUNC("templateName: %s", qPrintable(templateName)); // Creates view-object QStringList names = templateName.split("/"); if (names.count() != 2) { tError("Invalid patameter: %s", qPrintable(templateName)); return QString(); } TDispatcher<TActionView> viewDispatcher(viewClassName(names[0], names[1])); TActionView *view = viewDispatcher.object(); if (!view) { return QString(); } QVariantHash hash = allVariants(); for (QHashIterator<QString, QVariant> i(vars); i.hasNext(); ) { i.next(); hash.insert(i.key(), i.value()); // item's value of same key is replaced } view->setController(this); view->setVariantHash(hash); return view->toString(); }
/*! \~english Renders the \a view view. \~japanese ビューを描画する */ QByteArray TActionController::renderView(TActionView *view) { T_TRACEFUNC("view: %p layout: %s", view, qPrintable(layout())); if (!view) { tSystemError("view null pointer. action:%s", qPrintable(activeAction())); return QByteArray(); } view->setController(this); view->setVariantHash(allVariants()); if (!layoutEnabled()) { // Renders without layout tSystemDebug("Renders without layout"); return Tf::app()->codecForHttpOutput()->fromUnicode(view->toString()); } // Displays with layout QString lay = (layout().isNull()) ? name().toLower() : layout().toLower(); TDispatcher<TActionView> layoutDispatcher(layoutClassName(lay)); TActionView *layoutView = layoutDispatcher.object(); TDispatcher<TActionView> defLayoutDispatcher(layoutClassName("application")); if (!layoutView) { if (!layout().isNull()) { tSystemDebug("Not found layout: %s", qPrintable(layout())); return QByteArray(); } else { // Use default layout layoutView = defLayoutDispatcher.object(); if (!layoutView) { tSystemDebug("Not found default layout. Renders without layout."); return Tf::app()->codecForHttpOutput()->fromUnicode(view->toString()); } } } // Renders layout layoutView->setVariantHash(allVariants()); layoutView->setController(this); layoutView->setSubActionView(view); return Tf::app()->codecForHttpOutput()->fromUnicode(layoutView->toString()); }