Всем привет, буду благодарен тому кто объяснит следующее поведение (а вначале угадает его, гг).
В общем возникла такая проблема, по шагам:
1. Создал обертку, допустим MyWrapper
class MyWrapper {
public Object__c myObject {get;set;}
}
2. В контроллере есть такой метод
public MyWrapper wrapper {get;set;}public void refreshMyObject() {
// Field1__c - picklist
// Field2__c - text
if (wrapper.myObject.Field1__c == CONCRETE_VALUE) {
wrapper.myObject.Field2__c = null;
}
}
3. В VF странице примерно такое
<apex:inputField value="{!wrapper.myObject.Field1__c}">
<apex:actionSupport event="onchange" action="{!refreshMyObject}" rerender="myPanel"/>
</apex:inputField>
<apex:outputPanel layout="none" rendered="{!wrapper.myObject.Field1__c == CONCRETE_VALUE}">
<apex:inputField value="{!wrapper.myObject.Field2__c}"/>
</apex:outputPanel>
4. Угадайте какое будет поведение при
5. Это поведение я исправил (скорее всего костылём) Хотел бы услышать ваши мнения.
Всем привет, буду благодарен тому кто объяснит следующее поведение (а вначале угадает его, гг). В общем возникла такая проблема, по шагам: 1. Создал обертку, допустим MyWrapper [code]class MyWrapper { public Object__c myObject {get;set;} } [/code] 2. В контроллере есть такой метод [code]public MyWrapper wrapper {get;set;} public void refreshMyObject() { // Field1__c - picklist // Field2__c - text if (wrapper.myObject.Field1__c == CONCRETE_VALUE) { wrapper.myObject.Field2__c = null; } }[/code] 3. В VF странице примерно такое [code]<apex:inputField value="{!wrapper.myObject.Field1__c}"> <apex:actionSupport event="onchange" action="{!refreshMyObject}" rerender="myPanel"/> </apex:inputField> <apex:outputPanel layout="none" rendered="{!wrapper.myObject.Field1__c == CONCRETE_VALUE}"> <apex:inputField value="{!wrapper.myObject.Field2__c}"/> </apex:outputPanel>[/code] 4. Угадайте какое будет поведение при [list][*] выберем для Field1__c значение CONCRETE_VALUE [*] после этого изменим (т.к. инпут отрендерится) значение Field2__c [*] выберем для Field1__c значение отличное CONCRETE_VALUE [*] обратно выберем для Field1__c значение CONCRETE_VALUE [/list] 5. Это поведение я исправил (скорее всего костылём) :) Хотел бы услышать ваши мнения.
А что должно произойдти, поидее все нормально. Костиль уже не добавлен в код?
[quote="RasMisha"]Всем привет, буду благодарен тому кто объяснит следующее поведение (а вначале угадает его, гг). В общем возникла такая проблема, по шагам: 1. Создал обертку, допустим MyWrapper class MyWrapper { public Object__c myObject {get;set;} } 2. В контроллере есть такой метод public MyWrapper wrapper {get;set;} public void refreshMyObject() { // Field1__c - picklist // Field2__c - text if (wrapper.myObject.Field1__c == CONCRETE_VALUE) { wrapper.myObject.Field2__c = null; } } 3. В VF странице примерно такое <apex:inputField value="{!wrapper.myObject.Field1__c}"> <apex:actionSupport event="onchange" action="{!refreshMyObject}" rerender="myPanel"/> </apex:inputField> <apex:outputPanel layout="none" rendered="{!wrapper.myObject.Field1__c == CONCRETE_VALUE}"> <apex:inputField value="{!wrapper.myObject.Field2__c}"/> </apex:outputPanel> 4. Угадайте какое будет поведение при выберем для Field1__c значение CONCRETE_VALUE после этого изменим (т.к. инпут отрендерится) значение Field2__c выберем для Field1__c значение отличное CONCRETE_VALUE обратно выберем для Field1__c значение CONCRETE_VALUE 5. Это поведение я исправил (скорее всего костылём) Хотел бы услышать ваши мнения.[/quote] А что должно произойдти, поидее все нормально. Костиль уже не добавлен в код?
[quote="Alex Tsitsura"]А что должно произойдти, поидее все нормально. Костиль уже не добавлен в код?[/quote] Ну я думал кто-то догадается сам. В общем проблема: Field2__c после обнуления возвращает своё значение. "Костыля" в данном коде нет(!).
[quote="RasMisha"]wrapper.myObject.Field2__c = null; [/quote] Тоисть в Field2__c осталось значение, которое было указано до этого? Если да, то тагово по идее не должно быть.
RasMisha, с удовольствием пообщался с тобой на счет этого примера, но голова настолько забита текущей задачей, что просто не осилил даже.
Но я заметил эту проблему своего мозга уже давно
Если мне реально не надо разобраться с чем-то по работе код мне кажется вообще неподъемным.
Сколько раз на форуме выкладывали код и кажется что задача жопа, но буквально через пару дней сталкиваешься с такой проблемой и все оказывается простым если включить мозги.
Короче я сюда захожу когда хочу немного отключить мозг
Так что переживаю по существу твоего вопроса, но в этом состоянии я хуже студента
RasMisha, с удовольствием пообщался с тобой на счет этого примера, но голова настолько забита текущей задачей, что просто не осилил даже. Но я заметил эту проблему своего мозга уже давно :( Если мне реально не надо разобраться с чем-то по работе код мне кажется вообще неподъемным. Сколько раз на форуме выкладывали код и кажется что задача жопа, но буквально через пару дней сталкиваешься с такой проблемой и все оказывается простым если включить мозги. Короче я сюда захожу когда хочу немного отключить мозг :D Так что переживаю по существу твоего вопроса, но в этом состоянии я хуже студента :D
[quote="Alex Tsitsura"][quote="RasMisha"]wrapper.myObject.Field2__c = null; [/quote] Тоисть в Field2__c осталось значение, которое было указано до этого? Если да, то тагово по идее не должно быть.[/quote] Да, возвращается значение которое я ввел на шаге 4.2
Так что переживаю по существу твоего вопроса, но в этом состоянии я хуже студента
[quote="Dmitry Shnyrev"]Так что переживаю по существу твоего вопроса, но в этом состоянии я хуже студента [/quote] Я решил эту проблему, НО как я её решил мне не нравится. Не хочу говорить как, вдруг кто предложит лучший вариант (то что мой вариант предложат я вообще сомневаюсь, кроме может одного человека, которому я написал в скайп обратить внимание на то что я добавил :) )
Ни у кого нет мыслей что ли?
Ни у кого нет мыслей что ли?
У меня не получилось отрепродюсить, поле равно null после шага 4.4
У меня не получилось отрепродюсить, поле равно null после шага 4.4
Только что сам воспроизвел, т.к. в первом посте писал по памяти и не полный код, добавляю свой код с дев.орга
1. MyWrapper
public class MyWrapper {
public MyObject__c myObject {get;set;}public void AddObject(MyObject__c newObject) {
myObject = newObject;
}
}
2.MyController
public class MyController {public MyWrapper wrapper {get;set;}
public MyController() {
wrapper = new MyWrapper();
addMyObject();
}public void addMyObject() {
wrapper.AddObject(new MyObject__c());
}public void refreshMyObject() {
if (wrapper.myObject.Field1__c != 'Yes') {
wrapper.myObject.Field2__c = null;
}
}
}
3. MyPage
<apex:page showHeader="true" sidebar="true" controller="MyController"><apex:form>
<apex:outputPanel layout="Block" id="myPanel">
<apex:inputField value="{!wrapper.myObject.Field1__c}">
<apex:actionSupport event="onchange" action="{!refreshMyObject}" reRender="myPanel"/>
</apex:inputField>
<apex:outputPanel layout="none" rendered="{!wrapper.myObject.Field1__C == 'Yes'}">
<apex:inputField value="{!wrapper.myObject.Field2__c}"/>
</apex:outputPanel>
</apex:outputPanel>
</apex:form>
</apex:page>
4. MyObject__c состоит из 2х полей
Field1__c - пиклист с 2мя значениями Yes/No
Field2__c - текст
ps Если что могу сделать видео :)
Только что сам воспроизвел, т.к. в первом посте писал по памяти и не полный код, добавляю свой код с дев.орга 1. MyWrapper [code]public class MyWrapper { public MyObject__c myObject {get;set;} public void AddObject(MyObject__c newObject) { myObject = newObject; } }[/code] 2.MyController [code]public class MyController { public MyWrapper wrapper {get;set;} public MyController() { wrapper = new MyWrapper(); addMyObject(); } public void addMyObject() { wrapper.AddObject(new MyObject__c()); } public void refreshMyObject() { if (wrapper.myObject.Field1__c != 'Yes') { wrapper.myObject.Field2__c = null; } } }[/code] 3. MyPage [code]<apex:page showHeader="true" sidebar="true" controller="MyController"> <apex:form> <apex:outputPanel layout="Block" id="myPanel"> <apex:inputField value="{!wrapper.myObject.Field1__c}"> <apex:actionSupport event="onchange" action="{!refreshMyObject}" reRender="myPanel"/> </apex:inputField> <apex:outputPanel layout="none" rendered="{!wrapper.myObject.Field1__C == 'Yes'}"> <apex:inputField value="{!wrapper.myObject.Field2__c}"/> </apex:outputPanel> </apex:outputPanel> </apex:form> </apex:page>[/code] 4. MyObject__c состоит из 2х полей Field1__c - пиклист с 2мя значениями Yes/No Field2__c - текст ps Если что могу сделать видео :)
Ну ладно, в общем тогда моё решение и через что я до него дошел.
Сначале я попробовал заменить wrapper.myObject на <apex:variable .../> и дальше пользоваться переменной.
Результат тот же.
Следующим шагом я заменил
public MyWrapper wrapper {get;set;}
на массив (который по логике мог содержать только один элемент)
public MyWrapper[] wrapper {get;set;}
В итоге через <apex:repeat var="..." value="wrapper.myObject"/> это поведение изменилось на нужное мне.
Ну ладно, в общем тогда моё решение и через что я до него дошел. Сначале я попробовал заменить wrapper.myObject на <apex:variable .../> и дальше пользоваться переменной. Результат тот же. Следующим шагом я заменил [code]public MyWrapper wrapper {get;set;}[/code] на массив (который по логике мог содержать только один элемент) [code]public MyWrapper[] wrapper {get;set;}[/code] В итоге через <apex:repeat var="..." value="wrapper.myObject"/> это поведение изменилось на нужное мне.
По ходу все бессильны http://salesforce.stackexchange.com/questions/71785/please-help-explain-this-behavior
По ходу все бессильны :) http://salesforce.stackexchange.com/questions/71785/please-help-explain-this-behavior
Пятниццо
Пятниццо :D
Может ты на какой косяк salesforce наткнулся?
Здесь есть отдельная тема (длиииииная) по косякам от salesforce
Может ты на какой косяк salesforce наткнулся? Здесь есть отдельная тема (длиииииная) по косякам от salesforce
https://salesforce-developer.ru/forum/topic-kosyaki-salesforce-o-kotoryh-vy-vozmozhno-ne-znaete
Просто думал кому интересно поковыряться Мало ли какие еще "грязные" дела могут сделать свойства в ваших проектах.
Но, видимо, не очень интересно :)
Просто думал кому интересно поковыряться :) Мало ли какие еще "грязные" дела могут сделать свойства в ваших проектах. Но, видимо, не очень интересно :)
Просто думал кому интересно поковыряться Мало ли какие еще "грязные" дела могут сделать свойства в ваших проектах.
Но, видимо, не очень интересно :)
Интересно. Я просто почти 2 дня мудохался с компонентами и формами.
[quote="RasMisha"]Просто думал кому интересно поковыряться :) Мало ли какие еще "грязные" дела могут сделать свойства в ваших проектах. Но, видимо, не очень интересно :)[/quote] Интересно. Я просто почти 2 дня мудохался с компонентами и формами.
А я до сих пор (22.00 пятница) мудохаюсь с задачей сдедать супер дупер библиотеку медиа на js (как на wordpress), интегрировать ее с salesforce, WYSIWYG редактором и s3
А я до сих пор (22.00 пятница) мудохаюсь с задачей сдедать супер дупер библиотеку медиа на js (как на wordpress), интегрировать ее с salesforce, WYSIWYG редактором и s3 :D
А я до сих пор (22.00 пятница) мудохаюсь с задачей сдедать супер дупер библиотеку медиа на js (как на wordpress), интегрировать ее с salesforce, WYSIWYG редактором и s3 :D
[quote="Dmitry Shnyrev"]А я до сих пор (22.00 пятница) мудохаюсь с задачей сдедать супер дупер библиотеку медиа на js (как на wordpress), интегрировать ее с salesforce, WYSIWYG редактором и s3 :D[/quote] Ну и как успехи?
буду еще писать не один вечер
:D буду еще писать не один вечер