+1 امتیاز
قبل در برنامه نویسی توسط (7 امتیاز)
ویرایش شده قبل توسط

وقتی به جای domceode فیلد id یا oString میزارم درست کار میکنه ولی وقتی domcode میزارم کار نمیکنه

این listener هم نتونست به من کمک کنه من باید وقتی یک آیتم از لیست انتخاب میشه باید ببینم domcode اون مقدار داره یا نه چون دقیقا مشکل اینجاست که bind انجام نمیشه و entity.wrongdoer خالیه

کدی که لیستی که میخواهیم رو می‌آورد:

<c:rpcitem service="optionProvider.domDetailManager" parameter="${wrongDoerSearchParam}"
	return="${page.wrongDoerDomDetailList}" pageSize="${page.minusOne}" pageNumber="${page.minusOne}" />

این هم کد لیست باکس:




<c:ListBox id="wrongdoerInput" value="${filter['eq:wrongDoer.id']}"
		nullOption="true" label="@{msg['infraction_wrongdoer']}" stopPropagation="true">
		<c:item values="${page.wrongDoerDomDetailList.items}" value="ID"
			label="toString" />
</c:ListBox>

هدف من اینه که به جای value=ID بذارم value=domcode، ولی به غیر از ID و toString هر چیز دیگه‌ای که میگذاریم، مقدار نمیگیرد (حتی id).

1 پاسخ

0 امتیاز
قبل توسط (1.2هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ
نه کی ورد نیستند. احتمالاً مشکل در beancopier شماست که اصلا domcode را برای مرورگر ارسال نمی کند.
قبل توسط (7 امتیاز)
سوال رو ویرایش کردم، لطفا ملاحظه فرمایید. در ضمن beancopier فرمهای facelet کجا تعریف شده است؟ (ورژن 4.4.1)
قبل توسط (1.2هزار امتیاز)
+1
دقیقاً مشکل به beanCopier برمی گردد. چرا که optionProviderServlet فقط ID و toString را بر می گرداند. تعریف dataPageCopier را در فایل wise-core-gfaces.xml در پروژه ir.asta.wise.core شاخه src/main/resources/ir/asta/wise/core/spring ملاحظه بفرمایید.
برای آن منظور می توانید یک سرویس دیگر غیر از optionProvider برای خودتان بنویسید. یا اینکه در سمت سرور id را دریافت و از روی آن code را بازیابی و استفاده کنید.
قبل توسط (7 امتیاز)
سلام مهندس ممنون از راهنماییتون
من اومدم کلاس optionProviderServlet  رو با تغییر نام  copier اون گذاشتم تو پروژه خودم به شکل زیر
public class OptionProviderServlet implements GenericService, ApplicationContextAware{

    private ApplicationContext applicationContext;
    private BeanCopier searchParamCopier;
    private BeanCopier domDetailDataPageCopier;
   
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public DataModel invokeService(String serviceMethodName, DataModel parameter)
            throws Exception {
        Object bean = applicationContext.getBean(serviceMethodName);
        if(bean instanceof EntityManager){
             EntityManager manager = ((EntityManager)bean);
             SearchParam searchParam = (SearchParam)searchParamCopier.convert(parameter, SearchParam.class);
             DataPage datapage = manager.search(searchParam);
             return (DataModel)domDetailDataPageCopier.convert(datapage, GenericDataModel.class);
        }else{
            throw new RPCException("\"" + serviceMethodName + "\" is not an instance of \"" + EntityManager.class.getName() + "\"");
        }
    }
   
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        this.applicationContext = applicationContext;
    }
   
    public void setSearchParamCopier(BeanCopier searchParamCopier) {
        this.searchParamCopier = searchParamCopier;
    }
   
    public void setDomDetailDataPageCopier(BeanCopier domDetailDataPageCopier) {
        this.domDetailDataPageCopier = domDetailDataPageCopier;
    }
}
و مجبور شدم فایل wise-core-gfaces.xml رو هم بیارم تو پروژه خودم
<import resource="classpath:ir/asta/wise/core/spring/wise-core-gfaces.xml" />
    
    
    <bean id="optionProvider" class="ir.asta.wise.core.gfaces.server.OptionProviderServlet" >
        <property name="searchParamCopier">
            <bean parent="beancopier">
                <constructor-arg>
                    <list>
                        <value>*</value>
                        <value>filter(java.util.Map)</value>
                        <value>filter.*</value>
                    </list>
                </constructor-arg>
            </bean>           
        </property>
        <property name="domDetailDataPageCopier">
            <bean parent="beancopier">
                <constructor-arg>
                    <list>
                        <value>*</value>
                        <value>items(org.gfaces.facelet.DataModel)</value>
                        <value>items.ID</value>
                        <value>items.toString</value>
                        <value>items.*</value>
                    </list>
                </constructor-arg>
            </bean>           
        </property>
    </bean>

و مشکلم حل شد ولی نمیدونم تا چه حد درست عمل کردم
قبل توسط (1.2هزار امتیاز)
اگر نمی خواستید یک متد برای این کار به سرویسهایتان اضافه کنید، بهتر نبود از همان کلاس OptionProviderServlet در فایلهای خودتان یک بین دیگر با یک نام و BeanCopier جدید تعریف کنید و در Facelet از آن استفاده کنید؟ در این صورت نیازی به کپی کردن wise-core-gfaces.xml در فایلهای خود نخواهید داشت.
قبل توسط (7 امتیاز)
بلی مهندس اون راه خوبی نبود چون در واقع انگار تمام OptionProvider ها رو تغییر داده بودم.سرویس جدید با یک بین جدید مخصوص اون entity ایجاد کردم و تو لیست باکس ها از اون استفاده کردم که خیلی هم تمیز تر و بهتر شد.
بسیار سپاسگذارم از راهنماییتون

سوالات مشابه

+1 امتیاز
1 پاسخ 229 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
0 پاسخ 187 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 192 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 230 بازدید
0 امتیاز
1 پاسخ 192 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 260 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
1 پاسخ 209 بازدید
0 امتیاز
1 پاسخ 204 بازدید
+1 امتیاز
1 پاسخ 583 بازدید
...