Thanks, that helps clarify for me. 
In shiny the tableOutput renders an HTML page, but only if its object argument is a valid xtable argument, which rpart objects are not, unfortunately.
If we try to get around this using renderDataTable we need either a data frame or a matrix.
Unfortunately, an rpart object doesn't qualify for any of these alternatives. When you look at it, you see it is a list of lists:
> str(z.auto)
List of 14
$ frame :'data.frame': 7 obs. of 8 variables:
..$ var : Factor w/ 2 levels "<leaf>","Weight": 2 2 1 2 1 1 1
..$ n : int [1:7] 60 45 22 23 15 8 15
..$ wt : num [1:7] 60 45 22 23 15 8 15
..$ dev : num [1:7] 1354.6 361.2 61.3 117.7 60.4 ...
..$ yval : num [1:7] 24.6 22.5 20.4 24.4 23.8 ...
..$ complexity: num [1:7] 0.59535 0.13453 0.00956 0.01283 0.01 ...
..$ ncompete : int [1:7] 0 0 0 0 0 0 0
..$ nsurrogate: int [1:7] 0 0 0 0 0 0 0
$ where : Named int [1:60] 7 7 7 7 7 7 7 7 7 7 ...
..- attr(*, "names")= chr [1:60] "Eagle Summit 4" "Ford Escort 4" "Ford Festiva 4" "Honda Civic 4" ...
$ call : language rpart(formula = Mileage ~ Weight, data = car.test.frame)
$ terms :Classes 'terms', 'formula' language Mileage ~ Weight
.. ..- attr(*, "variables")= language list(Mileage, Weight)
.. ..- attr(*, "factors")= int [1:2, 1] 0 1
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:2] "Mileage" "Weight"
.. .. .. ..$ : chr "Weight"
.. ..- attr(*, "term.labels")= chr "Weight"
.. ..- attr(*, "order")= int 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(Mileage, Weight)
.. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
.. .. ..- attr(*, "names")= chr [1:2] "Mileage" "Weight"
$ cptable : num [1:4, 1:5] 0.5953 0.1345 0.0128 0.01 0 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:4] "1" "2" "3" "4"
.. ..$ : chr [1:5] "CP" "nsplit" "rel error" "xerror" ...
$ method : chr "anova"
$ parms : NULL
$ control :List of 9
..$ minsplit : int 20
..$ minbucket : num 7
..$ cp : num 0.01
..$ maxcompete : int 4
..$ maxsurrogate : int 5
..$ usesurrogate : int 2
..$ surrogatestyle: int 0
..$ maxdepth : int 30
..$ xval : int 10
$ functions :List of 2
..$ summary:function (yval, dev, wt, ylevel, digits)
..$ text :function (yval, dev, wt, ylevel, digits, n, use.n)
$ numresp : int 1
$ splits : num [1:3, 1:5] 60 45 23 1 1 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3] "Weight" "Weight" "Weight"
.. ..$ : chr [1:5] "count" "ncat" "improve" "index" ...
$ variable.importance: Named num 1006
..- attr(*, "names")= chr "Weight"
$ y : Named int [1:60] 33 33 37 32 32 26 33 28 25 34 ...
..- attr(*, "names")= chr [1:60] "Eagle Summit 4" "Ford Escort 4" "Ford Festiva 4" "Honda Civic 4" ...
$ ordered : Named logi FALSE
..- attr(*, "names")= chr "Weight"
- attr(*, "xlevels")= Named list()
- attr(*, "class")= chr "rpart"
This means having to deconstruct the rpart components that you want and assemble them into a data frame (probably preferable, since you can use either option).
The rpart object is a list mixed objects. I haven't found a utility that will convert it into a data frame. I hope that someone else knows of one, because extracting those is going to involve a lot of indexing.