Thanks for the help! It seems very obvious in retrospect. I guess I was just expecting a to get warns instead of errors. It's working well now. Thanks again.<br><br>Now on to the next problem:<br><br>I'm trying to load a jqGrid from json data made via a REST call. But my
grid is just a blank rectangle on the page. Here is my code:<br><br><pre class="prettyprint"><code><span class="tag"><body></span><span class="pln"><br><br></span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"tabs"</span><span class="tag">></span><span class="pln"><br>
</span><span class="tag"><ul></span><span class="pln"><br> </span><span class="tag"><li><a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#panel-users"</span><span class="tag">></span><span class="pln">Users</span><span class="tag"></a></li></span><span class="pln"><br>
</span><span class="tag"><li><a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#panel-clients"</span><span class="tag">></span><span class="pln">Clients</span><span class="tag"></a></li></span><span class="pln"><br>
<br> </span><span class="tag"></ul></span><span class="pln"><br> </span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"panel-users"</span><span class="tag">></span><span class="pln"><br>
</span><span class="tag"><table</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"list"</span><span class="tag">></table></span><span class="pln"> <br>
</span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"pager"</span><span class="tag">></div></span><span class="pln"> <br>
</span><span class="tag"></div></span><span class="pln"><br> </span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"panel-clients"</span><span class="tag">></span><span class="pln"><br>
<br> </span><span class="tag"></div></span><span class="pln"><br></span><span class="tag"></div></span><span class="pln"><br><br></span><span class="tag"><script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="tag">></span><span class="pln"><br>
$</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br> $</span><span class="pun">(</span><span class="str">"#tabs"</span><span class="pun">).</span><span class="pln">tabs</span><span class="pun">();</span><span class="pln"><br>
</span><span class="pun">});</span><span class="pln"><br></span><span class="tag"></script></span><span class="pln"><br><br></span><span class="tag"><script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="tag">></span><span class="pln"><br>
jQuery</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">ready</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln"> <br>
jQuery</span><span class="pun">(</span><span class="str">"#list"</span><span class="pun">).</span><span class="pln">jqGrid</span><span class="pun">({</span><span class="pln"><br> url</span><span class="pun">:</span><span class="str">'<a href="http://192.168.20.155:3000/admin/rest/users">http://192.168.20.155:3000/admin/rest/users</a>'</span><span class="pun">,</span><span class="pln"><br>
dataType</span><span class="pun">:</span><span class="pln"> </span><span class="str">'json'</span><span class="pun">,</span><span class="pln"><br> mtype</span><span class="pun">:</span><span class="pln"> </span><span class="str">'GET'</span><span class="pun">,</span><span class="pln"><br>
colNames</span><span class="pun">:[</span><span class="str">'Id'</span><span class="pun">,</span><span class="str">'Username'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Minutes'</span><span class="pun">,</span><span class="str">'Status'</span><span class="pun">,</span><span class="str">'Message'</span><span class="pun">,</span><span class="str">'Notes'</span><span class="pun">,</span><span class="str">'Troublemaker'</span><span class="pun">],</span><span class="pln"><br>
colModel </span><span class="pun">:[</span><span class="pln"> <br> </span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">'id'</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'id'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">11</span><span class="pun">},</span><span class="pln"> <br>
</span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">'username'</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'username'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">90</span><span class="pun">},</span><span class="pln"> <br>
</span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">'minutes'</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'minutes'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> align</span><span class="pun">:</span><span class="str">'right'</span><span class="pun">},</span><span class="pln"> <br>
</span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">'status'</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'status'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">80</span><span class="pun">,</span><span class="pln"> align</span><span class="pun">:</span><span class="str">'right'</span><span class="pun">},</span><span class="pln"> <br>
</span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">'message'</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'message'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">80</span><span class="pun">,</span><span class="pln"> align</span><span class="pun">:</span><span class="str">'right'</span><span class="pun">,</span><span class="pln"> sortable</span><span class="pun">:</span><span class="kwd">false</span><span class="pun">},</span><span class="pln"> <br>
</span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">'note'</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'note'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">150</span><span class="pun">,</span><span class="pln"> sortable</span><span class="pun">:</span><span class="kwd">false</span><span class="pun">},</span><span class="pln"><br>
</span><span class="pun">{</span><span class="pln">name</span><span class="pun">:</span><span class="str">"troublemaker"</span><span class="pun">,</span><span class="pln"> index</span><span class="pun">:</span><span class="str">'troublemaker'</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="lit">1</span><span class="pun">}</span><span class="pln"><br>
</span><span class="pun">],</span><span class="pln"><br> pager</span><span class="pun">:</span><span class="pln"> </span><span class="str">'#pager'</span><span class="pun">,</span><span class="pln"><br> rowNum</span><span class="pun">:</span><span class="lit">10</span><span class="pun">,</span><span class="pln"><br>
rowList</span><span class="pun">:[</span><span class="lit">10</span><span class="pun">,</span><span class="lit">20</span><span class="pun">,</span><span class="lit">30</span><span class="pun">],</span><span class="pln"><br>
sortname</span><span class="pun">:</span><span class="pln"> </span><span class="str">'username'</span><span class="pun">,</span><span class="pln"><br> sortorder</span><span class="pun">:</span><span class="pln"> </span><span class="str">'desc'</span><span class="pun">,</span><span class="pln"><br>
viewrecords</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"><br> caption</span><span class="pun">:</span><span class="pln"> </span><span class="str">'My test grid'</span><span class="pun">,</span><span class="pln"><br>
jsonReader </span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br> root</span><span class="pun">:</span><span class="pln"> </span><span class="str">"rows"</span><span class="pun">,</span><span class="pln"><br>
page</span><span class="pun">:</span><span class="pln"> </span><span class="str">"page"</span><span class="pun">,</span><span class="pln"><br> total</span><span class="pun">:</span><span class="pln"> </span><span class="str">"total"</span><span class="pun">,</span><span class="pln"><br>
records</span><span class="pun">:</span><span class="pln"> </span><span class="str">"records"</span><span class="pun">,</span><span class="pln"><br> repeatitems</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"><br>
cell</span><span class="pun">:</span><span class="pln"> </span><span class="str">"cell"</span><span class="pun">,</span><span class="pln"><br> id</span><span class="pun">:</span><span class="pln"> </span><span class="str">"id"</span><span class="pun">,</span><span class="pln"><br>
userdata</span><span class="pun">:</span><span class="pln"> </span><span class="str">"userdata"</span><span class="pln"><br> </span><span class="pun">}</span><span class="pln"><br> </span><span class="pun">});</span><span class="pln"> <br>
</span><span class="pun">});</span><span class="pln"> <br></span><span class="tag"></script></span><span class="pln"><br></span></code></pre><br><p>And here is the JSON data that the url returns:</p><p>{"page":0,"records":"3","total":1,"rows":[{"cell":["1","admin","30","enabled",null,null,"0"]},{"cell":["2","test1","30","enabled",null,null,"0"]},{"cell":["3","test2","30","enabled",null,null,"0"]}]}</p>
<blockquote>
</blockquote>
<p>I know this isn't specifically a Catalyst question, but I thought someone here may have experienced this before. I'm using Controller::REST and Catalyst::TraitFor::Controller::jQuery::jqGrid. Any help would be greatly appreciated.</p>
Here is the REST controller for posterity:<br>package LibkiServer::Controller::Admin::REST;<br>use Moose;<br>use namespace::autoclean;<br><br>with 'Catalyst::TraitFor::Controller::jQuery::jqGrid';<br><br>BEGIN {extends 'Catalyst::Controller::REST'; }<br>
<br>=head1 NAME<br><br>LibkiServer::Controller::Admin::REST - Catalyst REST Controller<br><br>=head1 DESCRIPTION<br><br>Catalyst REST Controller for Administration.<br><br>=head1 METHODS<br><br>=cut<br><br><br>=head2 index<br>
<br>=cut<br><br>sub users : Local : ActionClass('REST') { }<br><br>sub users_GET {<br> my ( $self, $c ) = @_;<br><br> my $user_rs = $c->model('DB::User')->search( {}, { prefetch => { session => 'client' } } );<br>
$user_rs = $self->jqgrid_page( $c, $user_rs );<br><br> my $row = 0; <br> my @row_data;<br> <br> while ( my $user = $user_rs->next() ) {<br> my $user_id = $user->id;<br> <br> my @cell;<br>
push( @cell, $user->id );<br> push( @cell, $user->username );<br> push( @cell, $user->minutes );<br> push( @cell, $user->status ); <br> push( @cell, $user->message );<br>
push( @cell, $user->notes );<br> push( @cell, $user->is_troublemaker );<br> push( @cell, defined( $user->session ) ? $user->session->status : undef );<br> push( @cell, defined( $user->session ) ? $user->session->client->id : undef );<br>
push( @cell, defined( $user->session ) ? $user->session->client->clientname : undef );<br> my $single_row = {<br> cell => \@cell<br> };<br> push( @row_data, $single_row );<br>
<br> }<br><br> $self->status_ok(<br> $c,<br> entity => { <br> page => $c->stash->{json_data}->{page},<br> total => $c->stash->{json_data}->{total},<br>
records => $c->stash->{json_data}->{records},<br> rows => \@row_data<br> }<br> );<br>}<br><br><br clear="all"><a href="http://www.kylehall.info">http://www.kylehall.info</a><br>
Mill Run Technology Solutions ( <a href="http://millruntech.com">http://millruntech.com</a> )<br>Crawford County Federated Library System ( <a href="http://www.ccfls.org">http://www.ccfls.org</a> )<br>Meadville Public Library ( <a href="http://www.meadvillelibrary.org">http://www.meadvillelibrary.org</a> )<br>
<br>
<br><br><div class="gmail_quote">On Thu, Jul 8, 2010 at 12:02 PM, Jeff Albert <span dir="ltr"><<a href="mailto:jralbert@uvic.ca">jralbert@uvic.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div link="blue" vlink="purple" lang="EN-US">
<div>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","serif"; color: rgb(31, 73, 125);">Some of your users have sessions, and thus will have a row or
rows in the related ‘session’ resultset – but some don’t. When you attempt to
access $user->session->client->clientname, you’re assuming that $user->session
is defined – but in the case of a user row with no related session row,
$user->session won’t be defined, and you’ll raise the error you described
when you attempt to access the methods of that resultset. Do a quick defined()
test on $user->session before you try to use its methods, and you’ll be good
to go. Hope that helps!</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","serif"; color: rgb(31, 73, 125);"> </span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","serif"; color: rgb(31, 73, 125);">Cheers,</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","serif"; color: rgb(31, 73, 125);">Jeff Albert</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: "Calibri","serif"; color: rgb(31, 73, 125);"> </span></p>
<div style="border-style: solid none none; border-color: rgb(181, 196, 223) -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 3pt 0in 0in;">
<p class="MsoNormal" style="margin-left: 0.5in;"><b><span style="font-size: 10pt;">From:</span></b><span style="font-size: 10pt;"> Kyle Hall [mailto:<a href="mailto:kyle.m.hall@gmail.com" target="_blank">kyle.m.hall@gmail.com</a>] <br>
<b>Sent:</b> Thursday, July 08, 2010 7:57 AM<br>
<b>To:</b> <a href="mailto:catalyst@lists.scsys.co.uk" target="_blank">catalyst@lists.scsys.co.uk</a><br>
<b>Subject:</b> [Catalyst] Nonsensical Problem with DBIx ResultSet</span></p>
</div><div><div></div><div class="h5">
<p class="MsoNormal" style="margin-left: 0.5in;"> </p>
<p class="MsoNormal" style="margin-right: 0in; margin-bottom: 12pt; margin-left: 0.5in;">Hello all,<br>
I'm the developer of a FOSS kiosk management system, Libki. I'm in the
early stages of a complete rewrite using Catalyst for the web-based
administration interface. This is my first time using Catalyst, but I'm very
excited by the possibilities! I'm having a very strange issue with my
resultsets. For example, I have three tables, a users table, a clients table,
and a sessions table that connects the user to a client.<br>
<br>
I grab my users from the database, with any session/client data if the user is
currently logged in to a client kiosk. I am prefetching the session and client
table data.<br>
<br>
my $user_rs = $c->model('DB::User')->search( {}, { prefetch => {
session => 'client' } } );<br>
<br>
Now I want to loop through it.<br>
<br>
my $row = 0;<br>
my @row_data;<br>
<br>
while ( my $user = $user_rs->next() ) {<br>
my $user_id = $user->id;<br>
<br>
warn
$user->session->client->clientname;<br>
<br>
my $single_row = {<br>
cell => [<br>
$user->id,<br>
$user->username,<br>
$user->minutes, <br>
$user->status, <br>
$user->is_troublemaker,<br>
$user->session->client->clientname;<br>
]<br>
}; <br>
push( @row_data, $single_row );<br>
}<br>
<br>
<br>
Now, if I try to access any of the other tables, I get an error:<br>
[error] Caught exception in LibkiServer::Controller::Admin::REST->users
"Can't call method "client" on an undefined value at
/home/libki/LibkiServer/script/../lib/LibkiServer/Controller/Admin/REST.pm line
40."<br>
<br>
I don't know why I get this error, but the really crazy part is *the warn still
works*:<br>
Client Name: testclient1 at
/home/libki/LibkiServer/script/../lib/LibkiServer/Controller/Admin/REST.pm line
40.<br>
<br>
If anyone can help me out, I'd be eternally grateful.<br>
<br>
Thanks,<br>
Kyle<br>
<br clear="all">
<a href="http://www.kylehall.info" target="_blank">http://www.kylehall.info</a><br>
Mill Run Technology Solutions ( <a href="http://millruntech.com" target="_blank">http://millruntech.com</a>
)<br>
Crawford County Federated Library System ( <a href="http://www.ccfls.org" target="_blank">http://www.ccfls.org</a>
)<br>
Meadville Public Library ( <a href="http://www.meadvillelibrary.org" target="_blank">http://www.meadvillelibrary.org</a>
)</p>
</div></div></div>
</div>
<br>_______________________________________________<br>
List: <a href="mailto:Catalyst@lists.scsys.co.uk">Catalyst@lists.scsys.co.uk</a><br>
Listinfo: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst" target="_blank">http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst</a><br>
Searchable archive: <a href="http://www.mail-archive.com/catalyst@lists.scsys.co.uk/" target="_blank">http://www.mail-archive.com/catalyst@lists.scsys.co.uk/</a><br>
Dev site: <a href="http://dev.catalyst.perl.org/" target="_blank">http://dev.catalyst.perl.org/</a><br>
<br></blockquote></div><br>