PDA

View Full Version : ایجاد کامپوننت در JFS



hassanmosavi
سه شنبه 22 مهر 1393, 10:17 صبح
سلام خدمت دوستان
من می خوام خودم کامپوننت بسازم و از فریم فرکهایی مثل ای فیس و پرایم فیس استفاده نکم.
گفتم اگه دوستان اطلاعاتی دارن یا منابعی که کمک که اشتراک بزارن
البته یه کلیاتی از کامپوننت سازی می دونم


یه نمونه که نوشتم البته خیلی ناقصه

package com.corejsf;


import java.io.IOException;
import java.util.Map;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIInput;
import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.convert.IntegerConverter;
import jdk.nashorn.internal.runtime.JSType;


@FacesComponent("com.corejsf.DataType")
public class UIDataType extends UIInput {


public UIDataType() {
// setConverter(new IntegerConverter()); // to convert the submitted value
setRendererType(null); // this component renders itself
}


public void encodeBegin(FacesContext context) throws IOException {
ResponseWriter writer = context.getResponseWriter();
String clientId = getClientId(context);


encodeInputField(writer, clientId);


}


public void decode(FacesContext context) {
Map<String, String> requestMap
= context.getExternalContext().getRequestParameterMa p();
String clientId = getClientId(context);


int increment = 0;
if (!requestMap.containsKey(clientId)) {
return;
}


try {
String submittedValue = (String) requestMap.get(clientId);
String type = (String) getAttributes().get("type");
boolean required = (boolean) getAttributes().get("required");
if ((submittedValue == null || submittedValue == "") && required == true) {
setSubmittedValue("پرکردن فیلد الزامی می باشد.");
return;
}
switch (type) {
case "int":
Integer v1 = toInteger(submittedValue);
setSubmittedValue(v1);
break;


case "double":
// double v2 = toDouble(submittedValue);
double v2 =Double.parseDouble(submittedValue);
setSubmittedValue(v2);
break;


case "string":
String v3 = toString(submittedValue);

setSubmittedValue( v3);
break;


}
} catch (NumberFormatException ex) {
setSubmittedValue((String) "نوع داده وارد شده اشتباه است");
}
}


private void encodeInputField(ResponseWriter writer, String clientId)
throws IOException {
Object v = getValue();
Object size = getAttributes().get("size");
Object title = getAttributes().get("title");
Object type = getAttributes().get("type");



writer.startElement("input", this);
writer.writeAttribute("name", clientId, null);
if (size != null) {
writer.writeAttribute("size", size, "size");
}


if (title != null) {
writer.writeAttribute("title", title, "title");
}
if (v != null) {
writer.writeAttribute("value", v, "value");
}
writer.endElement("input");


}


private static Integer toInteger(Object value) {
if (value == null) {
return null;
}
if (value instanceof Number) {
return ((Number) value).intValue();
}
if (value instanceof String) {
return Integer.parseInt((String) value);
}
throw new IllegalArgumentException("Cannot convert " + value);
}


private static double toDouble(Object value) {
if (value == null) {
return 0;
}
if (value instanceof Number) {
return ((Number) value).doubleValue();
}
if (value instanceof String) {
return Double.parseDouble((String) value);
}
throw new IllegalArgumentException("Cannot convert " + value);
}


private static String toString(Object value) {
if (value == null) {
return "KHata_1";
}


if (value instanceof String) {
return ((String) value);
}
return "khata_2";


}
}


در مورد رندر ها و لیسنر ها و خیلی چیزایی که نمی دونم سوال داشتم.

omidbizdotcom
سه شنبه 22 مهر 1393, 11:46 صبح
برای شروع به نظر من بهتره از ابزاری بنام CDK یا component development kit ای که Richfaces در اختیارت میذاره استفاده کنی تا با مفاهیم آشنا شی و کامپوننت هم بتونی بسازی بعد از اینکه کامل با این lifecycle آشنا شدید می تونی یه پروژه مثل پرایم خودت ایجاد کنی
من خودم به اینکار علاقه دارم اگه پروژه ای که میسازی متن باز باشه و رو گیت بذاری ممکنه بعضی ها کمک کنن به پیشرفت پروژه



https://github.com/omidp/omidbizComponents

این یه نمونه پروژه ای که من با جی اس اف 1.2 یه سری کامپوننت ساخته بودم در مجموع خوندن سورس هم خیلی بهت کمک می کنه