Re: ajaxtabbedpanel ??
Re: ajaxtabbedpanel ??
- Subject: Re: ajaxtabbedpanel ??
- From: Michael Sharp <email@hidden>
- Date: Mon, 17 Jan 2011 13:51:52 +1000
I think you're going to have to have a form per tab.
With a form wrapping the entire ATP, when tabs are selected form values are sent for the rendered form fields only and not the hidden/not in the DOM fields. The app seems to interpret this as nulls being provided for the missing fields, or in this case a default value of false.
If you override validateTakeValueForKeyPath you should see keypaths for non rendered fields showing up with null/false values when you select tabs..
Sharpy.
On 14/01/2011, at 9:56 PM, Theodore Petrosky wrote:
>
>
> --- On Fri, 1/14/11, Michael Sharp <email@hidden> wrote:
>
>
>> I do use TabbedPanel in an AMD so
>> I'll try.
>>
>> Any errors in eclipse console or javascript errors in the
>> browser?
>
> No errors
>
> WOD and java for AMD
>
> EditUserModalDialog : AjaxModalDialog {
> id = "editUserDialog";
> showOpener = false;
> locked = true;
> slideDownDuration = "0.2";
> slideUpDuration = "0.2";
> action = editUserMeta;
> onClose = refreshUserList;
> closeUpdateContainerID ="tableBody";
> transitions=true;
> }
>
> AMD is called from an opener:
>
> EditUserOpener: AjaxModalDialogOpener {
> label = current.fullNameString;
> dialogId = "editUserDialog";
> action = selectUserToEdit;
> title = EditUserMDTitle;
> }
>
> public WOActionResults editUserMeta() {
> TWTUser_EditMetaComponent nextPage = (TWTUser_EditMetaComponent)pageWithName(TWTUser_EditMetaComponent.class.getName());
> nextPage.setTheUser(aUserToEdit);
>
> return nextPage;
> }
>
>
>>
>> Is it a problem with Tab2 or with any tab after the initial
>> tab is displayed. If you give Tab2 the binding of
>> "isSelected = true;" does it display the correct behaviour?
>>
>>> the tabpanel is on an AjaxModalDialog, when I create
>> the modal dialog, I pass in a user object. user has a to one
>> relationship with securitySettings.
>>
>> So when you say pass in an object, you mean supplied as a
>> binding to the component where the AMD is declared?
>>
>> I can't reproduce the problem, maybe the contents of your
>> .wod for TabbedPanel, Tab1 & Tab2 might help..
>
> Here is all the code:
>
>
> <style>
> .ajaxTabbedPanel {
> width: auto;
> border-bottom: 1px solid #c0c0c0;
> padding: 10px 0 0 20px;
> }
>
> .ajaxTabbedPanelTab-selected {
> display: inline;
> padding: 3px 7px 1px 7px;
> background: #ffffff;
> border: 1px solid #c0c0c0;
> border-bottom: 0;
> }
>
> .ajaxTabbedPanelTab-unselected {
> display: inline;
> padding: 2px 7px 0 7px;
> background: #f0f0f0;
> border: 1px solid #c0c0c0;
> border-bottom: 0;
> color: #c0c0c0;
> }
>
> .ajaxTabbedPanelTab-selected a {
> font-weight: bold;
> font-size: 12pt;
> color: #0066CC;
> padding: 6px;
> }
>
> .ajaxTabbedPanelTab-unselected a {
> font-size: 10pt;
> padding: 6px;
> color: #a0a0a0;
> }
>
> .ajaxTabbedPanelPanes {
> width:97%;
> padding-left: 0px;
> margin: 2%;
> min-height: 300px;
> overflow: auto;
> }
>
> .ajaxTabbedPanelPane-selected {
> list-style-type: none;
> display: block;
> padding: 10px;
> }
>
> .ajaxTabbedPanelPane-unselected {
> list-style-type: none;
> display: none;
> }
>
> .tabBox {
> border: 1px solid #c0c0c0;
> height: 400px;
> width: 620px;
> overflow: auto;
> }
>
> tr.meta1 {
> height:30px
> }
> </style>
> <wo:WOForm multipleSubmit = true>
> <div class = "tabBox">
> <webObject name = "TabbedPanel">
> <webObject name = "Tab1">
> <table class = "tableDefs" width = "550">
> <tr class = "meta1">
> <td width = "110">First Name</td>
> <td><wo:WOTextField value = "$theUser.firstName" size = "65" /></td>
> </tr>
> <tr class = "meta1">
> <td width="35%">Last Name</td>
> <td><wo:WOTextField value = "$theUser.lastName" size = "65" /></td>
> </tr>
> <tr class = "meta1">
> <td>Title</td>
> <td><webobject name = "EmployeeTitlePopUp" /></td>
> </tr>
> </table>
>
> </webObject>
> <webObject name = "Tab2">
>
> <table width = "250">
> <tr>
> <td>
> <div>Sees Employee Management:
> <wo:WOCheckBox checked = "$theSecuritySettings.seesUserManagement" />
> <br />
> <br />
> Sees Client Management:
> <wo:WOCheckBox checked = "$theSecuritySettings.seesClientManagement" />
> <br />
> <br />
> Sees Settings Management:
> <wo:WOCheckBox checked = "$theUser.securitySettings.seesSettingsManagement" />
> <br />
> <br />
> Sees Work Management:
> <wo:WOCheckBox checked = "$theUser.securitySettings.seesWorkManagement" />
> <br />
> <br />
> Sees Billing Management:
> <wo:WOCheckBox checked = "$theUser.securitySettings.seesBillingManagement" />
> <br />
> <br />
> Sees Time Management:
> <wo:WOCheckBox disabled = application.noTimeTracking checked = "$theUser.securitySettings.seesTimeManagement" />
> <br />
> <br />
> Sees Task Management:
> <wo:WOCheckBox disabled = application.noTimeTracking checked = "$theUser.securitySettings.seesTaskManagement" />
> </div>
> <br />
> </td>
> </tr>
> </table>
>
> </webObject>
> </webObject>
> </div>
> <br />
> <wo:AjaxSubmitButton action = "$save" value = "Save" /><wo:AjaxSubmitButton action = "$cancelEdits" value = "Cancel" />
> </wo:WOForm>
> <div id = "busydiv" style = "display: none;"> <webobject name = "BusyImage" /> Loading... </div>
> <p style = "width: 600px;"> </p>
>
> WOD
>
>
> TabbedPanel: AjaxTabbedPanel {
> id = "tabbedPanel";
> busyDiv = "busydiv";
> }
>
> Tab1: AjaxTabbedPanelTab {
> id = "tab1";
> name = "Employee";
> isSelected = true;
> }
>
> Tab2: AjaxTabbedPanelTab {
> name = "Menus";
> refreshOnSelect=true;
>
> }
>
> BusyImage : WOImage {
> framework = "Ajax";
> filename = "wait30.gif";
> }
>
> EmployeeTitlePopUp : WOPopUpButton {
> list = eTitleList;
> selection = theUser.employeeTitle;
> displayString = theUser.employeeTitle.eTitleTitle;
> item = theUser.employeeTitle;
>
> }
>
> JAVA
>
> package com.eltek.components;
>
> import com.eltek.model.EmployeeTitle;
> import com.eltek.model.SecuritySettings;
> import com.eltek.model.User;
> import com.webobjects.appserver.WOContext;
> import com.webobjects.appserver.WOResponse;
>
> import er.ajax.AjaxModalDialog;
> import er.extensions.components.ERXComponent;
> import com.webobjects.appserver.WOActionResults;
> import com.webobjects.eoaccess.EOGeneralAdaptorException;
> import com.webobjects.foundation.NSArray;
> import com.webobjects.foundation.NSLog;
> import com.webobjects.foundation.NSValidation.ValidationException;
>
> public class EditUserMeta extends ERXComponent {
> public String formValueA;
> public String formValueB;
> public String formValueC;
> private User theUser;
> public NSArray<EmployeeTitle> eTitleList;
> private SecuritySettings theSecuritySettings;
>
>
> public EditUserMeta(WOContext context) {
> super(context);
> }
>
> public void appendToResponse(WOResponse response, WOContext context) {
>
> eTitleList = EmployeeTitle.fetchEmployeeTitles(theUser().editingContext(), EmployeeTitle.IS_ACTIVE.eq(true), EmployeeTitle.E_TITLE_TITLE.ascs());
>
> super.appendToResponse(response, context);
> }
>
> public WOActionResults save() {
>
> try {
> theUser().editingContext().saveChanges();
> } catch (ValidationException e) {
> NSLog.out.appendln("ValidationException e = " + e.getMessage());
>
> } catch (EOGeneralAdaptorException e) {
> NSLog.out.appendln("EOGeneralAdaptorException e = "
> + e.getMessage());
> }
>
> theUser().editingContext().revert();
>
> AjaxModalDialog.close(context());
> return null;
> }
>
> public void setTheUser(User theUser) {
> this.theUser = theUser;
>
> //experiment with new accessor for the security settings
>
> this.setTheSecuritySettings(theUser.securitySettings());
> }
>
> public User theUser() {
> return theUser;
> }
>
> public WOActionResults cancelEdits() {
>
> theUser().editingContext().revert();
>
> AjaxModalDialog.close(context());
> return null;
> }
>
> public void setTheSecuritySettings(SecuritySettings theSecuritySettings) {
> this.theSecuritySettings = theSecuritySettings;
> }
>
> public SecuritySettings theSecuritySettings() {
> return theSecuritySettings;
> }
> }
>
>
>>
>> Sharpy..
>>
>>>
>>> on panel one, I am displaying and editing user
>> metadata. on panel two, I want to edit some security
>> settings.
>>>
>>> if i put on tab one:
>>> see user area <wo:WOCheckBox checked =
>> "$theUser.securitySettings.seesUserManagement" />
>>>
>>> I get the checkbox with this user seesUserManagement
>> setting.
>>>
>>> However, if this same code is on tab two, there is no
>> connection to the object.
>>>
>>>
>>> <wo:WOForm multipleSubmit = true;>
>>> <div class = "tabBox">
>>> <webObject name = "TabbedPanel">
>>> <webObject name = "Tab1">
>>> <table class =
>> "tableDefs" width = "550">
>>> <tr class =
>> "meta1">
>>> <td width
>> = "110">First Name</td>
>>>
>> <td><wo:WOTextField value = "$theUser.firstName"
>> size = "65" /></td>
>>> </tr>
>>>
>>> </table>
>>> <br/><br/>
>>>
>>> see user area <wo:WOCheckBox checked =
>> "$theUser.securitySettings.seesUserManagement" />
>>>
>>> </webObject name = "Tab1">
>>>
>>> <webObject name = "Tab2">
>>>
>>> <wo:WOCheckBox checked =
>> "$theUser.securitySettings.seesUserManagement" />
>>>
>>> </webObject name = "Tab2">
>>> </webObject name = "TabbedPanel">
>>> </div>
>>> <wo:AjaxSubmitButton action = "$cancelEdits" value
>> = "Cancel" /><wo:AjaxSubmitButton action = "$save"
>> value = "Save" />
>>> </wo:WOForm>
>>>
>>>
>>> why doesn't tab2 connect to
>> "$theUser.securitySettings.seesUserManagement"
>>>
>>> on tab1 the checkbox is checked (correct) however on
>> tab2 no check.
>>>
>>> I don't even know if I am explaining this clearly
>> enough.
>>>
>>> Help, please.
>>>
>>> Ted
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>
>
> Any help would be appreciated
>
>
> Ted
>
>
>
>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden