كيفية التحكم في محاذاة datatable داخل لوحة لوحة؟
سؤال
لقد حصلت على إعداد متعدد الأعمدة ، مع DataTables مثل كل من الأعمدة. كل من Datatables هو طول مختلف. يؤدي هذا إلى تمديد لوحة الألواح لتناسب أكبر البيانات (حتى الآن ، هذا جيد). تتمحور DataTables المتبقية رأسياً (هذا ليس جيدًا لأنه يبدو فظيعًا على الشاشة) بدلاً من أن تكون مبررًا.
كيف يمكنني إخبار Panelgrid بالمحتويات العالية؟ أو ، هل مقاربي خاطئ تمامًا وأحتاج إلى القيام بشيء مختلف (إذا كان الأمر كذلك ، فإن الاقتراحات موضع ترحيب)؟
المحلول
يقدم JSF كـ HTML ويمكن تصميمه باستخدام CSS. فحص العنصر على النحو التالي:
- عرض صفحة JSF في متصفح.
- انقر بزر الماوس الأيمن فوق الصفحة.
- يختار أنظر المصدر.
ال <h:panelGrid>
يقدم HTML <table>
عنصر؛ ال <h:dataTable>
تقدم HTML <table>
عنصر ، كذلك. العناصر البيانات متداخلة داخل <td>
العنصر ، قدمه <h:panelGrid>
. لذا ، قم بتعيين vertical-align
التابع <td>
التابع <h:panelGrid>
إلى top
.
على افتراض أن <h:panelGrid>
لديه id
الذي ينتهي به <table id="panelGridId">
في HTML ، استخدم CSS التالية:
#panelGridId>tbody>tr>td {
vertical-align: top;
}
نماذج
إذا كانت الشبكة جزءًا من النموذج ، فستحتاج CSS إلى تضمين معرف النموذج. فمثلا:
<form id="amazingForm">
<h:panelGrid id="amazingGrid">
...
</h:panelGrid>
</form>
سوف تشبه CSS:
#amazingForm\:amazingGrid > tbody > tr > td {
vertical-align: top;
}
مثال
فيما يلي مثال على مستند HTML يعرض محاذاة رأسية تعمل داخل جدول تم تكوينه باستخدام CSS:
<!-- language: html -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>SO question 3547485</title>
<style>#myid>tbody>tr>td { vertical-align: top; }</style>
</head>
<body>
<table id="myid">
<tbody>
<tr>
<td><table><tbody><tr><td>n1a</td></tr><tr><td>n1b</td></tr></tbody></table></td>
<td><table><tbody><tr><td>n2a</td></tr></tbody></table></td>
<td><table><tbody><tr><td>n3a</td></tr><tr><td>n3a</td></tr><tr><td>n3c</td></tr></tbody></table></td>
</tr>
</tbody>
</table>
</body>
</html>
جميع المحاذاة إلى الأعلى. بدون القاعدة ، يتم توسيط جميعها. من الصعب معرفة القاعدة الدقيقة التي تحتاج إلى تطبيقها لأنه من غير الواضح كيف تبدو العلامات التي تم إنشاؤها.
دروس
أنظر أيضا:
نصائح أخرى
يمكنك استخدام CSS لجعل Panelgrids لتتماشى.
.mystyle {
vertical-align: top;
horizontal-align: center;
}
قم بتضمين ملفات XHTML الخاصة بك.
<link href="#{resource['css:style.css']}" rel="stylesheet" type="text/css"/>
وأضف هذا الرمز في PantsGrid.
<h:panelGrid columns="3" columnClasses="mystyle, mystyle, mystyle">
ملاحظة: بالنسبة لثلاثة أعمدة ، يمكنك تضمينها 3 مرات
يمكنك تجنب تطبيقه على كل TD ، فقط داخل Panelgrid و DataTable داخل ذلك. واجهت نفس المشكلة والعملت بالنسبة لي:
.pgstyle td{
vertical-align: top;
}
أين pgstyle هل يحتوي styleclass الذي تقدمه لكل لوحة على DataTable ، مثل:
<h:panelGrid columns="1" styleClass="pgstyle">
<rich:dataTable ..>
....
</rich:dataTable>
</h:panelGrid>